A - Kyu in AtCoder

水题

B - Magic 2

题意很好理解,但写的时候注意一下边界

  1. void solve() {
  2. int a, b, c, k;
  3. cin >> a >> b >> c >> k;
  4. while (a >= b) k--, b <<= 1;
  5. while (b >= c) k--, c <<= 1;
  6. cout << (k >= 0 ? "Yes" : "No");
  7. }

C - Marks

模拟题

由于比较位是 M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS) - 图1M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS) - 图2 其中M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS) - 图3 是一样的,所以我们只要比较更新的 M-SOLUTIONS Programming Contest 2020 游记 (AB水题,CD模拟,E题DFS) - 图4 大小即可

  1. void solve() {
  2. int n, k;
  3. cin >> n >> k;
  4. vector<ll> v(n);
  5. for (ll &x : v) cin >> x;
  6. for (int i = k; i < n; ++i) cout << (v[i] > v[i - k] ? "Yes\n" : "No\n");
  7. }

D - Road to Millionaire

同上,维护最新值即可

  1. void solve() {
  2. ll a, b, c = 1000;
  3. for (cin >> a >> b; cin >> a; b = a)
  4. if (a > b) c += c / b * (a - b);
  5. cout << c;
  6. }

E - M’s Solution

比较麻烦的DFS 题,考虑一下细节

  1. using ll = long long;
  2. const int N = 20;
  3. struct node {
  4. ll x, y, w;
  5. } e[N];
  6. ll n, res[N][N], ans[N];
  7. void dfs(int u, int cnt) {
  8. if (u == n) {
  9. ans[cnt] = min(ans[cnt], accumulate(res[n], res[n] + n, 0ll));
  10. return;
  11. }
  12. for (int i = 0; i < n; ++i) res[u + 1][i] = res[u][i];
  13. dfs(u + 1, cnt);
  14. for (int i = 0; i < n; ++i) res[u + 1][i] = min(res[u][i], e[i].w * abs(e[i].x - e[u].x));
  15. dfs(u + 1, cnt + 1);
  16. for (int i = 0; i < n; ++i) res[u + 1][i] = min(res[u][i], e[i].w * abs(e[i].y - e[u].y));
  17. dfs(u + 1, cnt + 1);
  18. }
  19. void solve() {
  20. cin >> n;
  21. for (int i = 0; i < n; ++i) {
  22. cin >> e[i].x >> e[i].y >> e[i].w;
  23. ans[i] = 1e18;
  24. res[0][i] = e[i].w * min(abs(e[i].x), abs(e[i].y));
  25. }
  26. dfs(0, 0);
  27. for (int i = 0; i <= n; ++i) cout << ans[i] << "\n";
  28. }