Codeforces Round #668 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1405
A. Permutation Forgery
题意
给出一个大小为 $n$ 的排列 $p$,定义
\begin{equation} F(p)=\mathrm{sort}([p_1+p_2,p_2+p_3,\ldots,p_{n-1}+p_n]) 。\nonumber \end{equation}
试找出一个不同于 $p$ 的 $p'$ 满足 $F(p') = F(p)$ 。
题解
反转 $p$ 即可。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++)
cin >> a[i];
reverse(a.begin(), a.end());
for (int i = 0; i < a.size(); i++)
cout << a[i] << " \n"[i == a.size() - 1];
}
return 0;
}
B. Array Cancellation
题意
给出一个大小为 $n$,满足 $\sum_{i=0}^{n-1} a_i = 0$ 的数组 $a$,每次可选择的操作如下:
- 选择 $i < j$,将 $a_i$ 减一,$a_j$ 加一,花费为 $0$
- 选择 $i > j$,将 $a_i$ 减一,$a_j$ 加一,花费为 $1$
问将 $a_i$ 均变为 $0$ 的最小花费是多少。
题解一
分别存储正数和负数的位置,然后贪心加双指针模拟。
代码
#include <bits/stdc++.h.>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> a(n);
vector<int> posi, nega;
for (int i = 0; i < n; i++) {
cin >> a[i];
if (a[i] > 0) posi.push_back(i);
if (a[i] < 0) nega.push_back(i);
}
int j = 0;
for (int i = 0; i < int(posi.size()); i++) {
while (a[posi[i]] > 0) {
while (j < int(nega.size()) and nega[j] < posi[i])
++j;
if (j == int(nega.size())) break;
int mi = min(a[posi[i]], -a[nega[j]]);
a[posi[i]] -= mi;
a[nega[j]] += mi;
if (a[nega[j]] == 0) ++j;
}
}
long long ans = 0;
for (int i = 0; i < n; i++)
if (a[i] > 0) ans += a[i];
cout << ans << "\n";
}
return 0;
}
题解二
最小负前缀的绝对值即为最少花费。
证明
对于最小负前缀,内部操作不会影响该负前缀的总和,涉及外部操作的最佳方案就是对负前缀加一,因为 $\sum_{i=0}^{n-1} a_i = 0$,所以此时后缀为正且绝对值与该负前缀相等,将二者各视为一个整体操作即可。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
long long ans = 0, cur = 0;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
cur += x;
ans = min(ans, cur);
}
cout << -ans << "\n";
}
return 0;
}
C. Balanced Bitstring
题意
如果一个偶数长 $k$ 的二进制串有 $\frac{k}{2}$ 个 $0$ 和 $1$,那么称这个二进制串为 $k$ 平衡串。给出一个由 $0,1,?$ 组成的字符串 $s$,$s$ 中的 $?$ 可被替换为 $0$ 或 $1$,判断 $s$ 是否可能为 $k$ 平衡串。
题解
因为共享中间的 $k-1$ 个字符,所以 $s_i = s_{i+k}$ 。
所以如果第一个 $k$ 长子串确定合法,则整个字符串确定合法。
另外还需枚举 $k$ 个起点并判断一开始的字符串中步长为 $k$ 的路径上的所有字符是否相同。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
string s;
cin >> s;
bool ok = true;
int zero = 0, one = 0;
for (int i = 0; i < k; i++) {
bool a0 = false, a1 = false;
for (int j = i; j < n; j += k)
if (s[j] != '?')
(s[j] == '0' ? a0 : a1) = true;
if (a0 and a1)
ok = false;
else if (a0 or a1)
++(a0 ? zero : one);
}
if (max(zero, one) > k / 2)
ok = false;
cout << (ok ? "YES" : "NO") << "\n";
}
return 0;
}
D. Tree Tag
题意
给出一颗树,Alice在结点 $a$,每次可以走的距离最多为 $da$,Bob在结点 $b$,每次可以走的距离最多为 $db$,Alice先走,问在无限步内Alice能否走到Bob的位置。
题解
Alice获胜的三种情况:
- 一开始Bob在Alice的覆盖半径内,因为Alice先手,所以一步就可以走到Bob的位置
- Alice的覆盖直径大于等于树的直径,此时Alice可以移到树的中心并覆盖树上的每一个点
- Alice的覆盖直径大于等于Bob的步长,此时以Alice的起点为根节点,Bob无法超出Alice的覆盖范围移到另一颗子树
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n, a, b, da, db;
cin >> n >> a >> b >> da >> db;
--a, --b;
vector<vector<int>> G(n);
for (int i = 0; i < n - 1; i++) {
int u, v;
cin >> u >> v;
--u, --v;
G[u].push_back(v);
G[v].push_back(u);
}
int diam = 0;
vector<int> dep(n);
function<int(int, int)> dfs = [&](int u, int p) {
int len = 0;
for (auto v : G[u]) {
if (v != p) {
dep[v] = dep[u] + 1;
int cur = 1 + dfs(v, u);
diam = max(diam, cur + len);
len = max(len, cur);
}
}
return len;
};
dfs(a, -1);
cout << (2 * da >= min(diam, db) or dep[b] <= da ? "Alice" : "Bob") << "\n";
}
return 0;
}
Codeforces Round #668 (Div. 2)【ABCD】的更多相关文章
- Codeforces Round #682 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1438 A. Specific Tastes of Andre 题意 构造一个任意连续子数组元素之和为子数组长度倍数的数组. ...
- Codeforces Round #678 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1436 A. Reorder 题解 模拟一下这个二重循环发现每个位置数最终都只加了一次. 代码 #include <bi ...
- Codeforces Round #676 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1421 A. XORwice 题意 给出两个正整数 \(a.b\),计算 \((a \oplus x) + (b \oplus ...
- Codeforces Round #675 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1422 A. Fence 题意 给出三条边 $a,b,c$,构造第四条边使得四者可以围成一个四边形. 题解 $d = max( ...
- Codeforces Round #732 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1546 A. AquaMoon and Two Arrays 题意 给出两个大小为 \(n\) 的数组 \(a, b\) ,每 ...
- Codeforces Round #677 (Div. 3)【ABCDE】
比赛链接:https://codeforces.com/contest/1433 A. Boring Apartments 题解 模拟即可. 代码 #include <bits/stdc++.h ...
- Codeforces Round #382 Div. 2【数论】
C. Tennis Championship(递推,斐波那契) 题意:n个人比赛,淘汰制,要求进行比赛双方的胜场数之差小于等于1.问冠军最多能打多少场比赛.题解:因为n太大,感觉是个构造.写写小数据, ...
- Codeforces Round #684 (Div. 2)【ABC1C2】
比赛链接:https://codeforces.com/contest/1440 A. Buy the String 题解 枚举字符串中 \(0\) 或 \(1\) 的个数即可. 代码 #includ ...
- Codeforces Round #658 (Div. 2)【ABC2】
做完前四题还有一个半小时... 比赛链接:https://codeforces.com/contest/1382 A. Common Subsequence 题意 给出两个数组,找出二者最短的公共子序 ...
随机推荐
- Dota游戏匹配的所有组合
在Dota游戏中有一种匹配玩法,任意5人以下玩家组队,加入匹配系统,由系统组合出5人 vs 5人的组合进行游戏,比如2人+3人 vs 1人+4人.抽象出这个问题,就变成两边各有m个玩家,最多允许n个 ...
- 基于 MPI/OpenMP 混合编程的大规模多体(N-Body)问题仿真实验
完整代码: #include <iostream> #include <ctime> #include <mpi.h> #include <omp.h> ...
- 简要MR与Spark在Shuffle区别
一.区别 ①本质上相同,都是把Map端数据分类处理后交由Reduce的过程. ②数据流有所区别,MR按map, spill, merge, shuffle, sort, r educe等各阶段逐一实现 ...
- Java开发手册之工程结构
1.在线上生产环境,JVM 的 Xms 和 Xmx 设置一样大小的内存容量,避免在 GC 后调整堆大小带来的压力. 2.给 JVM 环境参数设置-XX:+HeapDumpOnOutOfMemoryEr ...
- 【Problems】端口被占用 查看是被谁占用并关闭它
文章目录 Windows Linux 经常在Windows.Linux环境下运行JavaWeb项目,Tomcat的端口被占用了. 端口被占用就查看是被谁占用关闭它就行. Windows 在Window ...
- Java高并发与多线程(二)-----线程的实现方式
今天,我们开始Java高并发与多线程的第二篇,线程的实现方式. 通常来讲,线程有三种基础实现方式,一种是继承Thread类,一种是实现Runnable接口,还有一种是实现Callable接口,当然,如 ...
- oracle修改表栏位类型
需求:ID栏位在创建的时候是varchar类型,后续要修改为number类型 因为oracle修改表栏位类型的时候需要栏位内没有数据,因此无法直接把ID从varchar修改为number 1.新建一个 ...
- 使用Intelij 运行Android 程序导致的无法安装
前几天的时候更换了开发工具开发Android ,终于不用忍受Android studio 的各种卡顿了.我决定使用一段时间Intelij 开发Android. 之前的程序代码在运行的时候也出现了异常, ...
- Python安装教程之anaconda篇
[导读]我们知道,Python的功能非常强大.那么对于迫切想学习Python的新手同学来说,第一件事情可能需要了解python是什么?能用来做什么?语法结构是怎样的?这些我们几句话很难介绍清楚,后续会 ...
- Vue中:error 'XXXXX' is not defined no-undef解决办法
Vue中:error 'XXXXX' is not defined no-undef解决办法 报错内容: × Client Compiled with some errors in 7.42s √ S ...