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…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
