Codeforces Round #850 (Div. 2, based on VK Cup 2022 - Final Round)(A~E)
t宝酱紫喜欢出这种分类讨论的题?!
A1. Non-alternating Deck (easy version)

给出n张牌,按照题目给的顺序分给两人,问最后两人手中各有几张牌。
思路:模拟。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 1e5 + 5;
int t, n;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n;n --;ll cnta = 1, cntb = 0;int cnt = 0, res = 0;for(int i = 2; n > 0; i ++) {if(cnt == 2) res ^= 1, cnt = 0;if(res == 0)cntb += std::min(n, i), n -= std::min(n, i);elsecnta += std::min(n, i), n -= std::min(n, i);cnt ++;}std::cout << cnta << ' ' << cntb << '\n';}return 0;
}
A2. Alternating Deck (hard version)

在A1的基础上分了两种颜色,问最后每人手中每种颜色有几张。
思路:还是模拟。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 1e5 + 5;
int t, n;int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n;int pos = 1, cntp = 0, cnt = 0, res = 0;int cntaw = 0, cntab = 0, cntbw = 0, cntbb = 0;for(int i = 1; i <= n; i ++) {if(cntp == pos) {res ++;pos ++;cntp = 0;if(res & 1)cnt ^= 1;}if(!cnt) {if(i & 1)cntaw ++;elsecntab ++;}else {if(i & 1)cntbw ++;elsecntbb ++;}cntp ++;}std::cout << cntaw << ' ' << cntab << ' ' << cntbw << ' ' << cntbb << '\n'; }return 0;
}
B. Cake Assembly Line


给出一个蛋糕的位置序列和加巧克力的机器头的位置序列,调整两条线的相对顺序,是否可以满足机器头加入巧克力全部位于蛋糕上的要求。
思路:从头开始找范围的交集,如果交集不为空集就可以满足。当然,机器头的半径如果大于蛋糕的半径,那一定是不可以的。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 2e5 + 5;
int t, n, w, h;
ll a[N], b[N];int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n >> w >> h;for(int i = 1; i <= n; i ++) {std::cin >> a[i];}for(int i = 1; i <= n; i ++) {std::cin >> b[i];}if(w < h) {std::cout << "NO" << '\n';continue;}ll L = a[1] - w + h, R = a[1] + w - h;for(int i = 2; i <= n; i ++) {ll lb = L + b[i] - b[i - 1], rb = R + b[i] - b[i - 1];// std::cout << lb << ' ' << rb << '\n';ll l = a[i] - w + h, r = a[i] + w - h;// std::cout << l << ' ' << r <<'\n';L = std::max(l, lb), R = std::min(r, rb);// L = std::max(l, L);// R = std::min(R, r);// std::cout << l << ' ' << r << ' ' << L << ' ' << R << '\n';}std::cout << (L <= R ? "YES" : "NO") << '\n';}return 0;
}
C. Monsters (easy version)

给出一个序列的怪物的生命值,有两种操作,一是对其中一个怪物打击,使得它的生命值-1;二是对于所有的怪物进行打击,每一个都-1,如果在一次打击中有怪物生命值降为0,则可以重复该操作。求操作一使用次数最少是多少。
思路:最优的操作是使得操作数组存在1~x连续序列,数字必须从1开始,尽可能使得数字变大,不能通过一次操作二减去的那只能操作一减去了。
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 2e5 + 5;
int t, n;
ll a[N];int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n;for(int i = 1; i <= n; i ++) {std::cin >> a[i];}std::sort(a + 1, a + 1 + n);ll pos = 1, ans = a[1] - pos;for(int i = 2; i <= n; i ++) {if(a[i] == pos)continue;pos ++;ans += (a[i] - pos);}std::cout << ans << '\n';}return 0;
}
D. Letter Exchange

给出m个有三个字符的字符串,每次可以用两个字符串交换字符,问最少交换几次,可以的使得每个字符串的三个字符都不一样。
思路:大佬的思路
AC Code:
#include <bits/stdc++.h>typedef long long ll;
const int N = 1e5 + 5;
int t, n;
std::string s;struct node {int a, b;char c, d;
};int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;char ch[4] = "win";const std::array<int, 3> all1 = {1, 1, 1};while(t --) {std::cin >> n;std::map<std::array<int, 3>, std::vector<int>> mp;int sum = 0;for(int i = 1; i <= n; i ++) {std::cin >> s;std::array<int, 3> cnt = {};for(auto c : s) {if(c == 'w') cnt[0] ++;else if(c == 'i') cnt[1] ++;else cnt[2] ++;}if(cnt == all1) continue;mp[cnt].push_back(i);sum ++;}std::vector<node> op;while(sum) {int max = 0;std::array<int, 3> p1, p2;for(auto &[x1, v1] : mp) {if(v1.empty()) continue;for(auto &[x2, v2] : mp) {if(x1 == x2) continue;if(v2.empty()) continue;int c = 0;for(int i = 0; i < 3; i ++) {if(x1[i] < 1 && x2[i] > 1) c ++;else if(x2[i] < 1 && x1[i] > 1) c ++;}if(c > max) {max = c;p1 = x1, p2 = x2;}}}int t1 = mp[p1].back();int t2 = mp[p2].back();mp[p1].pop_back();mp[p2].pop_back();char c1, c2;for(int i = 0; i < 3; i ++) {if(p2[i] >= 2) c2 = ch[i], p2[i] --, p1[i] ++;else if(p1[i] >= 2) c1 = ch[i], p1[i] --, p2[i] ++;}if(p1 != all1) mp[p1].push_back(t1);else sum --;if(p2!= all1) mp[p2].push_back(t2);else sum --;op.push_back({t1, t2, c1, c2});}std::cout << op.size() << '\n';for(auto [a, b, c, d] : op) {std::cout << a << ' ' << c << ' ' << b << ' ' << d << '\n';}}return 0;
}
E. Monsters (hard version)

与C相同,不过区别是要对于每个i输出所需的最少操作一数量。
思路:我们的操作是将原数组组成一个+1递增的数列,对于每次向后加入的数,如果它比较小,那对于现有的数组来说没什么影响;但是若是加入的数比较大,那就需要考虑它的影响了。但是例如1,1,3,3,3,5来说,最后变成的数组为1,1,2,3,3,4,而其中第二个数和第四个数对于答案是没有贡献的,而去掉重复的元素后,前i个数的结果为:其中n是数组所能达到的最大的数。
引用大佬的结论和证明:

AC Code:
#include <bits/stdc++.h>typedef long long ll;
#define INF 0x3f3f3f3f3f3f3f3f
#define int long long
const int N = 2e5 + 5;
int t, n;
int a[N];struct SegmentTree {struct node {int l, r, max, add;} tr[N << 2];void pushup(int u) {tr[u].max = std::max(tr[u << 1].max, tr[u << 1 | 1].max);}void build(int u, int l, int r) {tr[u] = {l, r, -INF, 0};if(l == r) {tr[u].max = -l;return;}int mid = l + r >> 1;build(u << 1, l, mid);build(u << 1 | 1, mid + 1, r);pushup(u);}void pushdown(int u) {if(tr[u].add) {tr[u << 1].add += tr[u].add;tr[u << 1 | 1].add += tr[u].add;tr[u << 1].max += tr[u].add;tr[u << 1 | 1].max += tr[u].add;tr[u].add = 0;}}void modify(int u, int l, int r, int c) {if(tr[u].l >= l && tr[u].r <= r) {tr[u].max += c;tr[u].add += c;}else {pushdown(u);int mid = tr[u].l + tr[u].r >> 1;if(l <= mid) modify(u << 1, l, r, c);if(r > mid) modify(u << 1 | 1, l, r, c);pushup(u);}}int query(int u) {if(tr[u].l == tr[u].r) return tr[u].l;pushdown(u);if(tr[u << 1].max > 0) return query(u << 1);return query(u << 1 | 1);}} ST;signed main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cout.tie(0);std::cin >> t;while(t --) {std::cin >> n;for(int i = 1; i <= n; i ++) {std::cin >> a[i];}ST.build(1, 1, n);int cnt = 0, s = 0;for(int i = 1; i <= n; i ++) {cnt ++, s += a[i];ST.modify(1, a[i], n, 1);if(ST.tr[1].max > 0) {int x = ST.query(1);ST.modify(1, x, n, -1);cnt --, s -= x;}std::cout << s - cnt * (cnt + 1) / 2 << " \n"[i == n];}}return 0;
}
相关文章:

Codeforces Round #850 (Div. 2, based on VK Cup 2022 - Final Round)(A~E)
t宝酱紫喜欢出这种分类讨论的题?!A1. Non-alternating Deck (easy version)给出n张牌,按照题目给的顺序分给两人,问最后两人手中各有几张牌。思路:模拟。AC Code:#include <bits/stdc.h>typedef long…...

qt源码--信号槽
本篇主要从Qt信号槽的连接、断开、调用、对象释放等方面展开; 1.信号建立连接过程 connect有多个重载函数,主要是为了方便使用者,比较常用的有2种方式: a. QObject::connect(&timer, &QTimer::timeout, &loop, &am…...

RecycleView详解
listview缓存请看: listview优化和详解RecycleView 和 ListView对比:使用方法上ListView:继承重写 BaseAdapter,自定义 ViewHolder 与 converView优化。RecyclerView: 继承重写 RecyclerView.Adapter 与 RecyclerView.ViewHolder。设置 Layou…...

【算法】最短路算法
😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!Ǵ…...

< Linux > 进程间通信
目录 1、进程间通信介绍 进程间通信的概念 进程间通信的本质 进程间通信的分类 2、管道 2.1、什么是管道 2.2、匿名管道 匿名管道的原理 pipe函数 匿名管道使用步骤 2.3、管道的读写规则 2.4、管道的特点 2.5、命名管道 命名管道的原理 使用命令创建命名管道 mkfifo创建命名管…...

学习 Python 之 Pygame 开发魂斗罗(二)
学习 Python 之 Pygame 开发魂斗罗(二)魂斗罗的需求开始编写魂斗罗1. 搭建主类框架2. 设置游戏运行遍历和创建窗口3. 获取窗口中的事件4. 创建角色5. 完成角色更新函数魂斗罗的需求 魂斗罗游戏中包含很多个物体,现在要对这些物体进行总结 类…...

户籍管理系统测试用例
目录 一、根据页面的不同分别设计测试用例 登录页面 用户信息列表 用户编辑页面 用户更新页面 二、根据目的不同分别设计测试用例 一、根据页面的不同分别设计测试用例 上图是针对一个网站的测试,按照页面的不同分别来设计对应的测试用例。 登录页面 用户信息列…...

(三)代表性物质点邻域的变形分析
本文主要内容如下:1. 伸长张量与Cauchy-Green 张量2. 线元长度的改变2.1. 初始/当前构型下的长度比2.2. 主长度比与 Lagrange/Euler 主方向2.3. 初始/当前构型下任意方向的长度比3. 线元夹角的改变4. 面元的改变5. 体元的改变1. 伸长张量与Cauchy-Green 张量 由于变…...

Stream操作流 练习
基础数据:Data AllArgsConstructor NoArgsConstructor public class User {private String name;private int age;private String sex;private String city;private Integer money; static List<User> users new ArrayList<>();public static void m…...

【模拟集成电路】宽摆幅压控振荡器(VCO)设计
鉴频鉴相器设计(Phase Frequency Detector,PFD)前言一、VCO工作原理二、VCO电路设计VCO原理图三、压控振荡器(VCO)测试VCO测试电路图瞬态测试(1)瞬态输出(2)局部放大图&a…...
《英雄编程体验课》第 13 课 | 双指针
文章目录 零、写在前面一、最长不重复子串1、初步分析2、朴素算法3、优化算法二、双指针1、算法定义2、算法描述3、条件1)单调性2)时效性三、双指针的应用1、前缀和问题2、哈希问题3、K 大数问题零、写在前面 该章节节选自 《夜深人静写算法》,主要讲解最基础的枚举算法 ——…...

DS期末复习卷(十)
一、选择题(24分) 1.下列程序段的时间复杂度为( A )。 i0,s0; while (s<n) {ssi;i;} (A) O(n^1/2) (B) O(n ^1/3) © O(n) (D) O(n ^2) 12…xn xn^1/2 2.设某链表中最常用的…...

QT+OpenGL模板测试和混合
QTOpenGL模板测试和混合 本篇完整工程见gitee:QtOpenGL 对应点的tag,由turbolove提供技术支持,您可以关注博主或者私信博主 模板测试 当片段着色器处理完一个片段之后,模板测试会开始执行。和深度测试一样,它可能会丢弃片段&am…...
《英雄编程体验课》第 11 课 | 前缀和
文章目录 零、写在前面一、概念定义1、部分和2、朴素做法3、前缀和4、前缀和的边界值5、边界处理6、再看部分和二、题目描述1、定义2、求解三、算法详解四、源码剖析五、推荐专栏六、习题练习零、写在前面 该章节节选自 《算法零基础100讲》,主要讲解最基础的算法 —— 前缀和…...
Java学习--多线程2
2.线程同步 2.1卖票【应用】 案例需求 某电影院目前正在上映国产大片,共有100张票,而它有3个窗口卖票,请设计一个程序模拟该电影院卖票 实现步骤 定义一个类SellTicket实现Runnable接口,里面定义一个成员变量:privat…...

【Virtualization】Windows11安装VMware Workstation后异常处置
安装环境 Windows 11 专业版 22H2 build 22621.1265 VMware Workstation 17 Pro 17.0.0 build-20800274 存在问题 原因分析 1、BIOS未开启虚拟化。 2、操作系统启用的虚拟化与Workstation冲突。 3、操作系统启用内核隔离-内存完整性保护。 处置思路 1、打开“资源管理器”…...

第四章.神经网络—BP神经网络
第四章.神经网络 4.3 BP神经网络 BP神经网络(误差反向传播算法)是整个人工神经网络体系中的精华,广泛应用于分类识别,逼近,回归,压缩等领域,在实际应用中,大约80%的神经网络模型都采用BP网络或BP网络的变化…...

如何压缩RAR格式文件?
RAR是我们日常生活工作中经常用到的压缩文件格式之一,那么RAR文件如何压缩呢? 不管压缩哪种格式的压缩文件,我们都需要用到压缩软件。针对RAR格式,我们可以选择最常见的WinRAR,当然如果有同样适用于RAR格式的压缩软件…...

JS 执行机制 详解(附图)
一、JS是单线程JS语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。这是JS这门脚本语言诞生的使命所致——用来处理页面中用户的交互,以及操作DOM而诞生的。单线程就意味着,所有任务需要排队,前一个任务结束…...
华为OD机试真题Java实现【 计算面积】真题+解题思路+代码(20222023)
计算面积 绘图机器的绘图笔初始位i在原点(0.0)。 机器启动后其绘图笔按下面规则绘制直线: 1 )尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E, 2 )期间可通过指令在纵坐标轴方向进行偏移。井同时绘制直线,偏移后按规则1绘制直线;指令的格式为X offsetY。表示在横坐标X…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...