比赛链接

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. 飞桨paddlespeech语音唤醒推理C实现

    上篇(飞桨paddlespeech 语音唤醒初探)初探了paddlespeech下的语音唤醒方案,通过调试也搞清楚了里面的细节.因为是python 下的,不能直接部署,要想在嵌入式上部署需要有C下的推 ...

  2. 关于 OAuth 你又了解哪些?

    作者罗锦华,API7.ai 技术专家/技术工程师,开源项目 pgcat,lua-resty-ffi,lua-resty-inspect 的作者. OAuth 的背景 OAuth,O 是 Open,Au ...

  3. Function-advanced

    函数进阶 1. 函数防抖 在频率触发的情况下 只有等待一定的时间才会触发 执行一次代码 特点 执行之前先清除之前的即将执行操作 保证只有最后一次生效 优化高频执行JS代码操作 提高性能 防抖代码实现 ...

  4. PTA 4-6次总结

    (1)前言: 04:这次题目集主要学习了:使用LinkedHashSet删除arraylist中的重复数据,封装,了解Scanner类中nextLine()等方法.String类中split()等方法 ...

  5. rnacos——用rust重新实现的nacos开源配置、注册中心服务

    1. 简介 rnacos 是一个用rust实现的nacos服务. rnacos是一个轻量.快速.稳定的服务,包含注册中心.配置中心.web管理控制台功能. rnacos兼容nacos client s ...

  6. Maven工程开发

    Maven工程开发 编写pom.xml配置文件 <properties></properties>定义项目的基本信息 groupId 反向域名,定义项目组名 artifactI ...

  7. java中各引用类型的生存时间

    引用类型由上往下一次减弱: 强引用:Object obj=new Object(),无论什么情况下,只要强引用关系还存在,就不会回收被引用的对象. 软引用:像系统中缓存这些,在系统即将报内存溢出异常时 ...

  8. 2020-11-12:java中as-if-serial语义和happen-before语义有什么区别?

    福哥答案2020-11-12: as-if-serial语义单线程执行结果不被改变.happen-before语义正确同步的多线程执行结果不被改变.***这道题网上已经说烂了,就不必重复了.[happ ...

  9. 2021-11-30:给定一个数组arr,当拿走某个数a的时候,其他所有的数都+a, 请返回最终所有数都拿走的最大分数。 比如: [2,3,1], 当拿走3时,获得3分,数组变成[5,4]; 当拿走5

    2021-11-30:给定一个数组arr,当拿走某个数a的时候,其他所有的数都+a, 请返回最终所有数都拿走的最大分数. 比如: [2,3,1], 当拿走3时,获得3分,数组变成[5,4]: 当拿走5 ...

  10. Django4全栈进阶之路18 项目实战(用户管理):user_edit.html用户编辑画面设计

    1.模块 {% extends 'base.html' %} {% block content %} <!-- 编辑用户表单 --> <div class="card mt ...