Codeforces Round #808 (Div. 2)
Codeforces Round #808 (Div. 2)
传送门:https://codeforces.com/contest/1708
错过了,第二天vp的,只写出了AB就卡C了,竟然看不出是贪心555
A. Difference Operations
题意:给一个数组,由如下操作,问能不能使得\(a_2\) 到\(a_n\) 全为0
操作是选择一个i,使得\(a_i=a_i-a_{i-1}\) 。
解:显然\(a_2\) 是\(a_1\)的倍数,才可能被剪成0,同理\(a_3 是a_2 被减过程中某个数字的倍数\)
那么意味着所有数字都得是\(a_1\)的倍数,并且中间不可以被0隔断。
#include <bits/stdc++.h>
signed main() {
int t;
std::cin >> t;
while (t--) {
int n;
std::cin >> n;
int a[110] = {0};
for (int i = 1; i <= n; i++)
std::cin >> a[i];
int k = a[1];
bool f = 1;
for (int i = 2; i <= n; i++) {
if (k == 0 && a[i] != 0 || a[i] % k != 0)
f = 0;
if (a[i - 1] == 0 && a[i])
f = 0;
}
if (f)
std::cout << "YES" << std::endl;
else
std::cout << "NO" << std::endl;
}
}
B. Difference of GCDs
题意:构造一个长度为n的数组,满足所有数字都在区间[l,r]内。
并且所有\(gcd(i,a_i )\) 的值互不相同。i
解法:因为\(gcd(i,a_i )<=i\) 又要互不相同,那么就必须$gcd(i,a_i )==i $ 也就是说\(a_i 必须是i的倍数\) 然后就在[l,r]里随便找个倍数就行了。找不到就输出NO
#include <bits/stdc++.h>
#define int long long
const int N = 1e5 + 10;
int a[N];
signed main() {
std::ios::sync_with_stdio(false);
int t;
std::cin >> t;
while (t--) {
int n, l, r;
std::cin >> n >> l >> r;
bool f = 1;
for (int i = 1; i <= n; i++) {
a[i] = 0;
for (int j = (l - 1) / i * i + i; j <= r; j += i) {
if (j >= a[i]) {
a[i] = j;
break;
}
}
if (!a[i])
f = 0;
}
if (!f) {
std::cout << "NO" << std::endl;
continue;
} else {
std::cout << "YES" << std::endl;
for (int i = 1; i <= n; i++)
std::cout << a[i] << " \n"[i == n];
}
}
}
C. Doremy's IQ
题意:有n天,第i天有考试i,难度为\(a_i\) 有起始智商q,当q<=0时她无法继续参加考试。
如果参加的考试\(a_i>q\)那么q--。
问如何选择哪几天考试能考的次数最多。答案以01串输出。
思路:贪心地想,掉智商肯定是越迟掉越好,如果在i天选择了掉智商的考试,那么之后也要义无反顾地考下去。于是,我们可以直接二分从哪天开始掉智商并能考完后面的全部考试的。求出i最小的方案即可输出。
#include <bits/stdc++.h>
#define int long long
const int N = 1e5 + 10;
int a[N];
int ans[N];
int n, q;
std::vector<int> ve;
bool check(int p) {
int qq = q;
for (int i = 1; i < p; i++) {
if (a[i] > qq) {
ans[i] = 0;
} else {
ans[i] = 1;
}
}
for (int i = p; i <= n; i++) {
ans[i] = 1;
if (a[i] > qq)
qq--;
}
return qq >= 0;
}
signed main() {
std::ios::sync_with_stdio(false);
int t;
std::cin >> t;
while (t--) {
std::cin >> n >> q;
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
}
int l = 0, r = n;
while (l < r) {
int m = (l + r) >> 1;
if (check(m)) {
r = m;
} else
l = m + 1;
}
check(l);
for (int i = 1; i <= n; i++) {
std::cout << ans[i];
}
std::cout << "\n";
}
}
D. Difference Array
题意:给一个数组。让你把它变成它的差分数组,然后升序,继续变成差分数组...
直到最终只剩一个数字,输出这个数字。
思路:直接模拟肯定不行,但是发现,随着差分操作,一定会出现大量的0,而0和0的差分还是0,那么我们就可以直接把所有的0拿出来,每次操作减一,然后算上新生成的。其他过程就暴力模拟就好了。
#include <bits/stdc++.h>
#define int long long
const int N = 1e5 + 10;
int a[N];
signed main() {
std::ios::sync_with_stdio(false);
int t;
std::cin >> t;
while (t--) {
int n;
std::cin >> n;
std::vector<int> ve[2];
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
ve[0].push_back(a[i]);
}
int now = 0;
int cost0 = 0;
while (ve[now].size() >= 2) {
std::sort(ve[now].begin(), ve[now].end());
ve[now ^ 1].clear();
if (cost0) {
ve[now ^ 1].push_back(ve[now][0]);
cost0--;
}
for (int i = 0; i < ve[now].size() - 1; i++) {
int k = ve[now][i + 1] - ve[now][i];
if (k == 0) {
cost0++;
} else
ve[now ^ 1].push_back(k);
}
now ^= 1;
}
if (ve[now].size() == 0)
std::cout << 0 << "\n";
else if (ve[now].size() == 1) {
std::cout << ve[now][0] << "\n";
} else if (cost0 >= 1) {
std::sort(ve[now].begin(), ve[now].end());
int k1 = ve[now][0], k2 = ve[now][1] - ve[now][0];
std::cout << std::abs(k1 - k2) << "\n";
} else
std::cout << std::abs(ve[now][0] - ve[now][1]) << "\n";
}
}
Codeforces Round #808 (Div. 2)的更多相关文章
- 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为还需要的蜡烛数, ...
随机推荐
- Mysql数据库基础第二章:(八)子查询经典案例
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- Collections.synchronizedList使用方法
ArrayList众所周知ArrayList是非线程安全的,在多线程的情况下,向list插入数据的时候,可能会造成数据丢失的情况.并且一个线程在遍历List,另一个线程修改List,会报Concurr ...
- memoのMac折腾记录
memoのMac折腾记录 纯粹是一些零散的学习记录.有错误欢迎指出. 我就是一鼠标党,不会Linux. zsh加载 惭愧,最近才知道bash和zsh是两个不同的终端... 之前看一些mac设置系统环境 ...
- 数据库tempdb的事物日志已满,原因为“ACTIVE_TRANSACTION”
系统运行过程中,突然报错数据库tempdb的事物日志已满,原因为"ACTIVE_TRANSACTION".导致所有业务崩溃. 接到报警后,进入数据库服务器.检查硬盘空间正常,于是登 ...
- signalR client属性中的大致方法
T All { get; } 相当于持久连接中的 Broadcast. T AllExcept(params string[] excludeConnectionIds); 给排除本人所有人发送消息. ...
- C++入门之unordered_map
1.介绍 unordered_map是c++语言STL库中一个比较重要的容器,不能自动排序,这一容器是根据哈希表这一数据结构设计而成的,能够极大地提升数据搜索.插入和删除操作的时间效率. 2.头文 ...
- not eligible for getting processed by all BeanPostProcessors
描述 这个BUG大的起源是我上线以后,在后台看日志的时候发现一行奇怪的INFO日志: 2022-06-09 23:34:24 [restartedMain] [org.springframework. ...
- 20220305认证第1题 leetcode 1385. 两个数组间的距离值
给你两个整数数组 arr1 , arr2 和一个整数 d ,请你返回两个数组之间的 距离值 . 「距离值」 定义为符合此距离要求的元素数目:对于元素 arr1[i] ,不存在任何元素 arr2[j] ...
- Oracle存储过程 Call使用
在 Oracle 中,可以将存储过程(PROCEDURE)定义在一个包(PACKAGE)中. 要调用包中的存储过程,需要使用包名和存储过程名来引用它们.以下是一个示例: 假设我们有一个名为 my_pa ...
- Sharp7与S7NetPlus 性能测试
介绍 Sharp7和都S7NetPlus是纯C#实现的基于以太网与S7系列的西门子PLC通讯的开源库.都支持.net core 跨平台可以部署在linxu, docker,windwos 中. 测 ...