加载中...
ZAFUACM - 7.11个人赛补题 A - F & H
A - 111 - CodeForces - 659A题目链接 题意一个人绕着圆柱体建筑走路,每个点按序标号,给出正数就往标号大的方向走,负数就往标号小的方向走,问最后停在哪 思路这题挂了一遍就是对我抢时间连题目都没好好看的惩罚QAQ很简单,注意负数情况不要搞错就行 代码#include <iostream>#include <algorithm>#include <cmath>using namespace std;int n, a, b;int main(){ cin >> n >> a >> b; if (b < 0) a += 100 * n; int ans = abs((a + b) % n); if (ans == 0) ans = n; cout << ans; return 0;} B - 扣1 - CodeForces - 740B题目链接 题意从序列中取出若干子序列,再从子序列中选择若干个,要求让原序列中的每个数乘他们选 ...
ZAFUACM - 7.10个人赛补题 A - C & E & H
A - 黑崎x护 - CodeForces 501B题目链接 题意给出任意组数据,每组包含两个字符串,当 A 组的第二个字符串等于 B 组的第一个字符串时,将 A 组的第一个字符串转换成 B 组的第二个字符串,输出全部转换后还剩多少组数据,每组数据分别是什么 思路二重循环,每修改一次就把被修改的那一组做个标记(我是把被修改的那组的第一个字符串换成‘ ’表示这一组一会儿不用输出了) 代码#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1010;int q;string s[N][2];string ans[N][2];int num;int main(){ cin >> q; for (int i = 0; i < q; i ++ ) cin >> s[i][0] >> s[i][1]; for (int i = 0; i < q; ...
ZAFUACM - 7.9个人赛补题 A - C E G H
A CodeForces - 495B题目链接 题意给出一个 a 一个 b ,求出有多少不同的 x 满足 a mod x = b,输出 x 个数,如果有无数个就输出 “infinity” 思路 当 a = b 时,有无穷多个可以取的 x 当 a < b 时,x 取任何数都不成立 当 a > b 时,就是求 a - b 有多少个大于 b 的因子 为了防止TLE,求因子个数时,循环结束条件应该写 sqrt(a - b) (痛 代码#include <iostream>#include <algorithm>#include <cmath>using namespace std;typedef long long LL;int a, b;int main(){ cin >> a >> b; if (a == b) cout << "infinity"; else if (a < b) cout << 0; else { ...
7-11 关键活动
题目原题链接 https://pintia.cn/problem-sets/1399202744970727424/problems/1418527362277498881 假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。 比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。 但是需要注意的是,对一组子任务,并不是任意的任务调度都是一个可行的方案。比如方案中存在“子任务A依赖于子任务B,子任务B依赖于子任务C,子任务C又依赖于子任务A”,那么这三个任务哪个都不能先执行,这就是一个不可行的方案。 任务调度问题中,如果还给出了完成每个子任务需要的时间,则我们可以算出完成整个工程需要的最短时间。在这些子任务中,有些任务即使推迟几天完成,也不会影响全局的 ...
【cf】CodeForces Round 905(Div.3)题解
A. Morning原题链接 题意一个人要打字,光标现在停在1,键盘顺序是1234567890,挪动一个位置和按下这个键都需要花费1s,问打完给定字符串最少需要几秒 思路这题有个需要注意的点是,到0之后想打别的键是往左走,不可以往右直接到1,注意这个其他就没什么了 代码#include <bits/stdc++.h>using namespace std;typedef pair<int, int> PII;using i64 = long long;typedef long long LL;void solve(){ string s; cin >> s; i64 ans = 0; unordered_map<int, int> pos; for (int i = 1; i <= 9; i ++ ) pos[i] = i; pos[0] = 10; ans = abs(pos[s[0] - '0'] - pos[1]) + 1; for (int i = ...
【cf】CodeForces Edu Round 153(Div.2)题解 A - C
A. Not a Substring原题链接 题意给出一段长度为 n 的仅由(和)组成的字符串,要求输出一段长度为 2*n 的不包含给定字串的字符串,其中()要对应,比如说不能)( 思路这题还是想了一会儿,最后发现其实只有()的情况不能输出,其余情况可以按照以下规则输出: 如果给出的子串中有两个相同括号相连,比如说((或者)),那只要连着输出()就可以使最终结果不包含两个相同的括号相邻 如果给出的子串没有两个相同括号相连,那只要在输出时让相同括号相连就好了,输出 n 个(和 n 个)即可代码#include <bits/stdc++.h>using namespace std;using i64 = long long;typedef pair<int, int> PII;void solve(){ string s; cin >> s; if (s == "()") { cout << "NO\n"; return; ...
【cf】CodeForces Round 893(Div.2)题解 A - C
A. Buttons原题链接 题意有三堆物品,给出每一堆物品的数量,第一个人只能从第一堆和第三堆每次拿一个,第二个人只能从第二堆和第三堆每次拿一个,谁先没东西拿谁就输,问谁能赢 思路这一题一开始脑子抽了wa了一发,都想让对方输所以都得先拿第三堆的,第三堆拿完了再看第一二堆谁多谁少,注意一下奇偶即可 代码#include <bits/stdc++.h>using namespace std;using i64 = long long;typedef pair<int, int> PII;void solve(){ int a, b, c; cin >> a >> b >> c; if (c % 2 == 0) { if (a > b) cout << "First\n"; else cout << "Second\n"; } else { ...
【cf】CodeForces Round 892(Div.2)题解 A - D
A. United We Stand原题链接 题意给出一个数组a,把数组a中的元素分给两个空数组,要求第一个数组中的每个元素都不能是第二个数组中元素的倍数,输出一种分法 思路首先,对a排序,只要出现了1,一定是放在b数组里,否则放在c里,b中就一定会出现1的倍数 然后不是1的第一个元素一定要放在c中,因为要求bc都非空 之后因为数据范围比较小,就是暴力枚举了,这个数如果是c中元素的倍数就放到c,不是就放到b 代码#include <bits/stdc++.h>using namespace std;using i64 = long long;typedef pair<int, int> PII;void solve(){ int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i ++ ) cin >> a[i]; sort(a.begin(), a.end()); vector<int> b, c; ...
【cf】CodeForces Round 891(Div.3)题解
A. Array Coloring题意给出一个数组,把这个数组中的元素分成两部分,使得每一部分的和都是奇数或者都是偶数,问能不能分 思路直接判断整个数组的元素和是奇数还是偶数,如果是奇数直接输出NO,偶数直接输出YES,因为奇数=奇数+偶数,偶数既可以等于偶数加偶数,也可以等于奇数加偶数 代码#include <bits/stdc++.h>using namespace std;void solve(){ int n; cin >> n; i64 sum = 0; for (int i = 0; i < n; i ++ ) { int x; cin >> x; sum += x; } if (sum % 2 == 0) cout << "YES\n"; else cout << "NO\n";}int main(){ ios::sync_ ...
【cf】CodeForces Round 890(Div.2)题解 A - C
A. Tales of a Sort题意给出一个数组,每次操作可以将 ==所有== 元素 $a[i]$ 变成 $max(0,a_i-i)$,问至少操作多少次能将数组变成递增数组 思路这一题卡很久,最后发现踩了两个坑 题目读错了,每次操作会改变所有元素,而不是指定元素! 元素 $a[i]>=0$ ,不用考虑负数情况! 我的思路是,另外开一个数组存储原数组排好序的结果,然后从后往前遍历两个数组,计算出原数组末尾有多少元素是已经排好序的,我们在操作的时候就可以不考虑这些元素,直接将未排序的部分全部变成 0 即可,答案就是未排序部分的最大值 代码#include <bits/stdc++.h>using namespace std;void solve(){ int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i ++ ) cin >> a[i]; vector<int> b = a; sort(b.begin ...