codeforces eduRound 107 div2 A-D
https://codeforces.com/contest/1511
A
有两个服务器。
你是一个电影导演,你导演了电影。
喜欢的人会点赞,不喜欢的人会点踩。
而对于第三种人,如果他看到的踩比赞多,他就会点踩,否则点赞。
问最多可以收到多少个赞。
比较简单的贪心。
#include <bits/stdc++.h> using namespace std; int main() { int T; scanf("%d", &T); while (T--) { int n, a; scanf("%d", &n); int ans = 0; while (n--) scanf("%d", &a), ans += (a != 2); printf("%d\n", ans); } return 0; }
B
给定三个数的十进制下的位数,你需要构造
置位的思路是最好的。
#include <bits/stdc++.h> using namespace std; int f[10] = {0, 1}; int main() { for (int i = 2; i < 10; ++i) f[i] = f[i - 1] * 10; int T; scanf("%d", &T); while (T--) { int a, b, c; scanf("%d%d%d", &a, &b, &c); a = f[a], b = f[b]; if (b != c) b += f[c]; printf("%d %d\n", a, b); } return 0; }
C
模拟即可。deque模拟1s都不要。
我的思路是:维护每个颜色最顶上的牌即可。因为只有它们会参与移动。
底层并没有跃迁的机会。
D
#include <bits/stdc++.h> #define sc(x) scanf("%d", &(x)) #define rep(i, l, r) for (int i = l; i <= r; ++i) using namespace std; typedef long long ll; const int N = 2e5 + 7; char s[N]; int main() { int n, k; sc(n), sc(k); int p = 0; for (char i = 'a'; i < 'a' + k; ++i) { s[++p] = i; for (char j = 1 + i; j < 'a' + k; ++j) { s[++p] = i; s[++p] = j; } } int i = 1; while (n--) { if (i > p) i = 1; putchar(s[i++]); } putchar(10); return 0; }
算法竞赛之路 文章被收录于专栏
整理、记录算法竞赛的好题