补题链接:Here

A - Century

整除 KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)(AB水题,C思维,D搜索,E DP) - 图1 并且判断能否整除完全

B - 200th ABC-200

按题意即可

C - Ringo’s Favorite Numbers 2

求出 KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)(AB水题,C思维,D搜索,E DP) - 图2 为 200 的倍数的个数,转化为贡献值即可

  1. using ll = long long;
  2. void solve() {
  3. ll ans = 0;
  4. int n, a[210] = {0};
  5. cin >> n;
  6. for (ll i = 1, x; i <= n; ++i) {
  7. cin >> x;
  8. x %= 200;
  9. ans += a[x];
  10. a[x]++;
  11. }
  12. cout << ans << '\n';
  13. }

D - Happy Birthday! 2

搜索情况

  1. int n, a[205];
  2. vector<int> c[205], b;
  3. void dfs(int x, int sum) {
  4. if (c[sum].size() && b != c[sum]) {
  5. cout << "Yes\n";
  6. cout << b.size() << ' ';
  7. for (int i : b) cout << i << ' ';
  8. cout << "\n";
  9. cout << c[sum].size() << ' ';
  10. for (int i : c[sum]) cout << i << ' ';
  11. cout << "\n";
  12. exit(0);
  13. } else if (b.size())
  14. c[sum] = b;
  15. if (x == n + 1) return;
  16. dfs(x + 1, sum);
  17. b.push_back(x), dfs(x + 1, (sum + a[x]) % 200), b.pop_back();
  18. }
  19. void solve() {
  20. cin >> n;
  21. for (int i = 1; i <= n; ++i) cin >> a[i];
  22. dfs(1, 0);
  23. cout << "No\n";
  24. }

E - Patisserie ABC 2

DP

  1. using ll = long long;
  2. const int N = 3e6 + 10;
  3. ll f[4][N];
  4. void solve() {
  5. ll n, k;
  6. cin >> n >> k;
  7. f[0][0] = 1;
  8. for (int i = 1; i <= 3; i++)
  9. for (int j = 1; j <= 3 * n; j++)
  10. f[i][j] = f[i][j - 1] + f[i - 1][j - 1] - (j > n ? f[i - 1][j - 1 - n] : 0);
  11. ll s;
  12. for (s = 3; k > f[3][s]; s++)
  13. k -= f[3][s];
  14. for (int i = 2, v; i >= 1; i--) {
  15. for (v = 1; k > f[i][s - v]; v++)
  16. k -= f[i][s - v];
  17. cout << v << " ";
  18. s -= v;
  19. }
  20. cout << s << "\n";
  21. }