【CF VP记录】Codeforces Round 1008 (Div. 2)
比赛链接
本文原文发布于博客园,如您在其他平台刷到此文,请前往博客园获得更好的阅读体验。
跳转链接:https://www.cnblogs.com/TianTianChaoFangDe/p/18766146
开题 + 补题情况
坠机场,要是赛时打了的话就又回青了,前两题很快开出来了,第三题脑残了,一开始觉得只需要构造第一个数就行了然后爽吃两发罚时。

A. Final Verdict
瞎猜的,只要所有数的和除以 \(n\) 得到的值为 \(x\) 一定有解,暂时没想到如何证明,有空再来证一证。
点击查看代码
#include <bits/stdc++.h>
#define inf 2e18
#define int long long
const int N = 2e5 + 9;
void solve()
{
int n, x;std::cin >> n >> x;
std::vector<int> a(n);
int sum = 0;
for(auto &i : a) {
std::cin >> i;
sum += i;
}
if(sum % n == 0 && sum / n == x) {
std::cout << "YES\n";
} else {
std::cout << "NO\n";
}
}
B. Vicious Labyrinth
题目要让所有人离 \(n\) 的距离最小化。
我们对 \(k\) 分奇偶讨论:
- 如果 \(k\) 为奇数,那么我们只需要把 \(n\) 传送到 \(n - 1\),其余位置传送到 \(n\),那么经过一次传送后,就只有一个人在 \(n - 1\) 的位置,其他人均在 \(n\) 的位置,接下来偶数次只会在这两个位置反复横跳,答案为 \(1\)。
- 如果 \(k\) 为偶数,那么我们把 \(n - 1\) 传送到 \(n\),其余位置传送到 \(n - 1\),这样再来一次传送后,就只有一个人在 \(n - 1\) 的位置,其他人均在 \(n\) 的位置,接下来偶数次只会在这两个位置反复横跳,答案为 \(1\)。
由于不能往原位置传送,所以至少有一个人无法抵达 \(n\),因此答案至少为 \(1\),所以上述构造为最优解。
点击查看代码
#include <bits/stdc++.h>
#define inf 2e18
#define int long long
const int N = 2e5 + 9;
void solve()
{
int n, k;std::cin >> n >> k;
if(k & 1) {
for(int i = 1;i <= n;i ++) {
if(i == n)std::cout << n - 1 << ' ';
else std::cout << n << ' ';
}
} else {
for(int i = 1;i <= n;i ++) {
if(i == n - 1)std::cout << n << ' ';
else std::cout << n - 1 << ' ';
}
}
std::cout << '\n';
}
C. Breach of Faith
一开始以为只要把第一项当成未知项,然后把后面的数排一下序求一下就行了,直到我搓出了这个样例 \(2, 3, 4, 5\),这个样例按这个想法来的话,求出来的值是 \(-2\),显然不符合题意,并且除了这种情况,还有可能导致数字重复,同样不符合题意。
对于此题,我们对题目中的式子进行变形:\(0 = -a_1 + a_2 -a_3 + ... +a_{2 \times n} - a_{2 \times n + 1}\)。
我们首先对所给 \(b\) 数组进行一下从小到大排序,因为这样可以一减一加后是正数,更容易命中答案(其实这个也是猜的,为什么要排序具体的也没细证)。
然后,我们对上面那个式子枚举每一项作为消失项,通过对上面的新式子进行移项求出这一项的值,然后判断一下这个值是否合法,如果合法,这就是满足题意的构造。
对于移项后其他项的和,可以通过记录奇偶前缀和来快速求出。
时间复杂度:\(O(n \log n)\),\(\log n\) 来源于我使用了 map 记录一个数字是否出现过。
点击查看代码
#include <bits/stdc++.h>
#define inf 2e18
#define int long long
const int N = 2e5 + 9;
void solve()
{
int n;std::cin >> n;
std::vector<int> a(2 * n + 2), b(2 * n + 1);
std::map<int, bool> vis;
for(int i = 1;i <= 2 * n;i ++) {
std::cin >> b[i];
vis[b[i]] = true;
}
sort(b.begin() + 1, b.end());
std::vector<int> preodd(2 * n + 2, 0), preeve(2 * n + 2, 0);
for(int i = 1;i <= 2 * n;i ++) {
if(i & 1) {
preodd[i] = preodd[i - 1] + b[i];
preeve[i] = preeve[i - 1];
}
else {
preodd[i] = preodd[i - 1];
preeve[i] = preeve[i - 1] + b[i];
}
}
for(int i = 1;i <= 2 * n + 1;i ++) {
int ans = 0;
ans += preodd[i - 1];
ans -= preeve[i - 1];
ans += preeve[2 * n] - preeve[i - 1];
ans -= preodd[2 * n] - preodd[i - 1];
if(i & 1) {
ans = -ans;
}
if(!vis.count(ans) && ans > 0) {
for(int j = 1;j < i;j ++) {
a[j] = b[j];
}
a[i] = ans;
for(int j = i;j <= 2 * n;j ++) {
a[j + 1] = b[j];
}
break;
}
}
for(int i = 1;i <= 2 * n + 1;i ++) {
std::cout << a[i] << " ";
}
std::cout << '\n';
}
【CF VP记录】Codeforces Round 1008 (Div. 2)的更多相关文章
- 【cf比赛记录】Codeforces Round #601 (Div. 2)
Codeforces Round #601 (Div. 2) ---- 比赛传送门 周二晚因为身体不适鸽了,补题补题 A // http://codeforces.com/contest/1255/p ...
- 【cf比赛记录】Codeforces Round #600 (Div. 2)
Codeforces Round #600 (Div. 2) ---- 比赛传送门 昨晚成绩还好,AC A,B题,还能上分(到底有多菜) 补了C.D题,因为昨晚对C.D题已经有想法了,所以补起题来也快 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- 刷题记录:Codeforces Round #734 (Div. 3)
Codeforces Round #734 (Div. 3) 20210920.网址:https://codeforces.com/contest/1551. 编程细节:下标定义不要一会[1,n]一会 ...
- 刷题记录:Codeforces Round #739 (Div. 3)
Codeforces Round #739 (Div. 3) 20210907.网址:https://codeforces.com/contest/1560. --(叹). A 不希望出现带" ...
- 刷题记录:Codeforces Round #724 (Div. 2)
Codeforces Round #724 (Div. 2) 20210713.网址:https://codeforces.com/contest/1536. div2明显比div3难多了啊-只做了前 ...
- 刷题记录:Codeforces Round #725 (Div. 3)
Codeforces Round #725 (Div. 3) 20210704.网址:https://codeforces.com/contest/1538. 感觉这个比上一个要难. A 有一个n个数 ...
- 刷题记录:Codeforces Round #719 (Div. 3)
Codeforces Round #719 (Div. 3) 20210703.网址:https://codeforces.com/contest/1520. 没错,我是个做div3的蒟蒻-- A 大 ...
- Codeforces Round #803 (Div. 2) A-D 刚vp完还没补题
Codeforces Round #803 (Div. 2) 2022/7/24 上午VP 传送门:https://codeforces.com/contest/1698 A. XOR Mixup 随 ...
- 刷题记录:Codeforces Round #731 (Div. 3)
Codeforces Round #731 (Div. 3) 20210803.网址:https://codeforces.com/contest/1547. 感觉这次犯的低级错误有亿点多-- A 一 ...
随机推荐
- mac 10.15 国内如何安装brew
下载文件 brew_install.sh,然后执行 sh brew_install.sh 通常会卡在 tapping homebrew/core ,没关系, 执行如下命令即可 解决方法,手动执行下面 ...
- Qt/C++编写超精美自定义控件(历时9年更新迭代/超202个控件/祖传原创)
一.前言 无论是哪一门开发框架,如果涉及到UI这块,肯定需要用到自定义控件,越复杂功能越多的项目,自定义控件的数量就越多,最开始的时候可能每个自定义控件都针对特定的应用场景,甚至里面带了特定的场景的一 ...
- Qt开源作品13-三套样式表
一.前言 在做各种各样的项目中,难免遇到需要设定自己界面风格样式的时候,而Qt提供的qss就是牛逼的为了实现定制各种各样的皮肤的,其实一个完美的UI界面,主要由两大块组成,一个是颜色搭配,一个是布局, ...
- Wasm在即时通讯IM场景下的Web端应用性能提升初探
本文由得物技术WWQ分享,原题"基于IM场景下的Wasm初探:提升Web应用性能",下文进行了排版和内容优化. 1.什么是Wasm Wasm,全称 WebAssembly,官网描述 ...
- 基于Redis有序集合实现滑动窗口限流
滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间段内的请求次数.通过动态地滑动窗口,可以动态调整限流的速率,以应对不同的流量变化. 整个限流可以概括 ...
- Kubernetes Pod状态和生命周期管理
Pod是kubernetes中你可以创建和部署的最小也是最简的单位.Pod代表着集群中运行的进程. Pod中封装着应用的容器(有的情况下是好几个容器),存储.独立的 ...
- superset 相关视频(建议初学者开始刷2天视频,开眼界)
建议集中一段时间刷视频,不用具体知道怎么操作,先明白能干什么,大概在那里弄,达到什么效果,是否符合自己的预期,然后再根据具体遇到的问题,再找视频 另外,看的时候注意有版本的不同,具体操作时候,版本不同 ...
- Kotlin:【异常处理】自定义异常、先决条件函数
- 阿里云开启ssl证书过程记录 NGINX
作者简介:大家好,我是思无邪,2024 毕业生,某厂 Go 开发工程师.. 我的网站:https://www.yishanicode.top/ ,持续更新,希望对你有帮助. 如果文章或网站知识点有错误 ...
- Q:Win10关闭内存压缩功能
微软在Win10中就已经启用了内存压缩机制,在Win11当中继续了这一设定. 通过任务管理器查看. taskmgr ·通过命令行查看. 使用系统管理员权限,打开PowerShell,然后输入以下命令: ...