比赛链接

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\) 次操作,每次操作以下的一种:

  1. 奖金 \(s\) 加上 \(s\) 的个位数字。
  2. 使用奖金 \(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的更多相关文章

  1. 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 ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. 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 ...

  7. 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 ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  10. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

随机推荐

  1. LNMP搭建静态网页服务器

    chattr -i default/.user.ini LNMP搭建使用 1.安装screen,命令或者操作可以一直运行下去 yum install screen 2.获取及安装 LNMP wget ...

  2. 基于海思H3520DV400和QT5.9设计的车载终端DVR控制平台

    ​ 目录 前言: 说明: 功能介绍: 设计思路: 详细设计: QT界面设计: 代码实现: 注意事项: (一)QT运行慢问题 (二)QT图层隐藏问题 (三)鼠标问题 (四)字体问题 (五)主界面图案 ( ...

  3. 浏览器发送POST请求、DELETE请求

    1.浏览器发送POST请求 方法一: var xml = new XMLHttpRequest(); var url = "http://127.0.0.1:8800/admin/user& ...

  4. 【已解决】使用代理后,登陆微软账号提示0x800190001

    今天晚上想要登录Onedrive同步文件时,发现怎么都登陆不上去,报出的错误代码是0x80190001,在网上搜索了各种方法,重置网络,重置Onedrive都没什么用,甚至把Onedrive重装了一遍 ...

  5. Oracle之table()函数的使用,提高查询效率

    目录 一.序言 二.table()函数使用步骤 三.table() 具体使用实例 3.1 table()结合数组 使用 3.2 table()结合PIPELINED函数(这次报表使用的方式) 3.3 ...

  6. 2021-09-10:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案

    2021-09-10:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标.你可以假设每种输入只会对应一个答案, ...

  7. drf-spectacular

    介绍 drf-spectacular是为Django REST Framework生成合理灵活的OpenAPI 3.0模式.它可以自动帮我们提取接口中的信息,从而形成接口文档,而且内容十分详细,再也不 ...

  8. SQL Server 2014 英文版安装教程

    安装过程如下 1. 点击setup开始安装. 2. 选择如下的全新安装. 3. 自动生成产品密钥,然后点击下一步. 4. 勾选接受条款,然后点击下一步. 5. 自动更新根据实际情况进行选择,点击下一步 ...

  9. MMCM and PLL Dynamic Reconfiguration

    Reconfiguration is performed through the DRP. The DRP provides access to the configuration bits that ...

  10. 【Java】Eclipse常用快捷键整理

    前言 还是最近在上Java课,由于疫情原因,看的网课,那里的老师比较实战派,很多时候不知道按了什么快捷键就立马出现了很骚的操作.网上查询后发现了一些快捷键对于我这个eclipse小白还是挺常用的,整理 ...