Codeforces Round #885 (Div. 2) A-D
A
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool solve() {
int n, m, k;
cin >> n >> m >> k;
int x, y;
cin >> x >> y;
bool ok = 1;
for (int i = 1;i <= k;i++) {
int xx, yy;
cin >> xx >> yy;
ok &= abs(x - xx) + abs(y - yy) & 1;
}
if (ok) cout << "YES" << '\n';
else cout << "NO" << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}
B
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<int> c[200007];
bool solve() {
int n, k;
cin >> n >> k;
for (int i = 1;i <= k;i++) c[i].clear();
for (int i = 1;i <= k;i++) c[i].push_back(0);
for (int i = 1;i <= n;i++) {
int x;
cin >> x;
c[x].push_back(i);
}
for (int i = 1;i <= k;i++) c[i].push_back(n + 1);
int ans = n;
for (int i = 1;i <= k;i++) {
priority_queue<int> pq;
for (int j = 1;j < c[i].size();j++) pq.push(c[i][j] - c[i][j - 1] - 1);
int mx = pq.top();
if (mx) {
pq.pop();
pq.push((mx - 1) / 2);
pq.push(mx / 2);
}
ans = min(ans, pq.top());
}
cout << ans << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}
C
题意
给定长为 \(n\) 的数组 \(a,b\) ,每次操作使得 \(a_i,b_i = b_i,|a_i-b_i|(1\leq i \leq n)\) 。
问是否可以通过若干次操作使得 \(a_i = 0(1 \leq i \leq n)\) 。
题目
知识点:数论。
注意到,操作到最后一定能使得 \(a_i = 0\) ,并进入周期为 \(3\) 的循环,那么只要每个位置的数字进入循环的操作次数模 \(3\) 同余即可。
模拟操作显然是不行的。注意到 \(a_i \geq 2b_i\) 时,有 \((a_i,b_i) \to (b_i,a_i-b_i) \to (a_i-b_i,a_i-2b_i) \to (a_i-2b_i,b_i)\) 。因此,可以直接 \(a_i \bmod 2b_i\) ,这样不影响操作次数模 \(3\) 的结果。随后,执行操作一次继续上述操作。
时间复杂度 \(O(n \log 10^9)\)
空间复杂度 \(O(n)\)
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int a[100007], b[100007];
bool solve() {
int n;
cin >> n;
for (int i = 1;i <= n;i++) cin >> a[i];
for (int i = 1;i <= n;i++) cin >> b[i];
int ok = -1;
for (int i = 1;i <= n;i++) {
if (a[i] == 0 && b[i] == 0) continue;
int tmp = 0;
while (a[i]) {
if (b[i]) a[i] %= 2 * b[i];
swap(a[i], b[i]);
b[i] = abs(a[i] - b[i]);
(++tmp) %= 3;
}
if (ok == -1) ok = tmp;
else if (ok != tmp) return false;
}
cout << "YES" << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << "NO" << '\n';
}
return 0;
}
D
题意
初始时有奖金 \(s\) ,接下来可以执行 \(k\) 次操作,每次操作以下的一种:
- 奖金 \(s\) 加上 \(s\) 的个位数字。
- 使用奖金 \(s\) ,不会使得奖金减少,使用的奖金会累加。
问最多能使用多少奖金。
题目
知识点:数学,三分。
显然要尽可能将 \(s\) 变大,再开始使用。
模拟操作1显然复杂度不行,考虑找到 \(s\) 增加的循环节。
我们发现 \(s \bmod 10 = 0 \text{ 或 } 5\) 时,至多操作 \(1\) 次就不需要继续操作了。因此,考虑取不操作的答案和操作 \(1\) 次的答案的最大值即可。
对于其他情况,至多操作 \(1\) 次就会进入 \(6,2,4,8\) 的循环,因此同样也记录不操作的答案和操作 \(1\) 次的答案的最大值,之后可以利用循环快速计算答案。
对于一开始的贪心结论,我们很容易想到凸函数三分求极值,但样例提示这不是一个凸函数。注意到,循环节长度只有 \(4\) ,若我们枚举终点在循环节中的位置,那么剩下的就是以常数 \(20\) 增加,这显然是个凸函数,可以用三分。
进一步地,最后那个凸函数是个二次函数,也可以直接求抛物线对称轴得到最值。
时间复杂度 \(O(\log k)\)
空间复杂度 \(O(1)\)
代码
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
bool solve() {
ll s, k;
cin >> s >> k;
ll ans = s * k;
s += s % 10;
k--;
ans = max(ans, s * k);
if (s % 10 == 0) {
cout << ans << '\n';
return true;
}
auto check = [&](ll x) {
return (s + x * 20) * (k - x * 4);
};
for (int i = 0;i < 4 && k;i++, s += s % 10, k--) {
ll l = 0, r = k / 4;
while (l <= r) {
ll mid1 = l + (r - l) / 3;
ll mid2 = r - (r - l) / 3;
if (check(mid1) <= check(mid2)) l = mid1 + 1;
else r = mid2 - 1;
}
ans = max(ans, check(r));
}
cout << ans << '\n';
return true;
}
int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int t = 1;
cin >> t;
while (t--) {
if (!solve()) cout << -1 << '\n';
}
return 0;
}
Codeforces Round #885 (Div. 2) A-D的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
随机推荐
- html/css 添加图片
通过img.src添加图片 添加一个img元素,设置content,会发现在IE.safari等浏览器内显示为空白. 一般我们使用img,是通过src来设置的,可以通过react的import图片添加 ...
- [Pytorch框架] 4.5 多GPU并行训练
文章目录 4.5 多GPU并行训练 4.5.1 torch.nn.DataParalle 4.5.2 torch.distributed 4.5.3 torch.utils.checkpoint im ...
- windows11 下使用 阿里云 modelscope docker 环境 运行参考
昨天看视频 我们做了个能对话的AI派蒙,免费给大家玩! 发现阿里有一个语音转文字的模型(paraformer),之前处理这种需求一直都是直接调用服务商提交好的API接口 突然想尝试一下本地搭建,虽然和 ...
- \n 和 std::endl 的区别
std::cout << std::endl; 等价于 std::cout << '\n' << std::flush; 除了写入换行符,std::endl 还会刷 ...
- 百度飞桨(PaddlePaddle)安装
注意:32位pip没有PaddlePaddle源 # 如果报下列错误,检查 Python 版本,不能过高也不要太低,并且不能是 32位的. ERROR: Could not find a versio ...
- 解析草稿-造价管理-工程经济-P190-例4.2.3
原题 计算步骤 需要记忆的概念 excel计算文件 [腾讯文档]例题
- 微擎删除分类无法删除解决-select in效率低解决办法
今天朋友微擎后台微网站里的分类要删除,可是怎么删除也不能删除,同样的系统另一套却可以迅速删除. 后来查询到是查询语句的问题,朋友的平台用户量太大,数据太大,用了以下语句,造成效率太低: SELECT ...
- 2022-02-26:k8s安装swagger,yaml如何写?
2022-02-26:k8s安装swagger,yaml如何写? 答案2022-02-26: yaml如下: apiVersion: apps/v1 kind: Deployment metadata ...
- Django admin管理工具的使用、定制及源码解析
admin组件使用 Django 提供了基于 web 的管理工具. Django 自动管理工具是 django.contrib 的一部分.你可以在项目的 settings.py 中的 INSTALLE ...
- Qt+QtWebApp开发笔记(一):QtWebApp介绍、下载和搭建基础封装http轻量级服务器Demo
前言 在arm上做了Qt的应用程序,为了在局域网实现web页的访问方式来配置arm上Qt的程序,局域网轻量级http服务器是很好的实现方式之一,有机会做国产麒麟上Qt的http服务器,正好接触到了 ...