A Large Digits


  1. int n;
  2. int main()
  3. {
  4. IOS;
  5. int a, b, resa = 0, resb = 0;
  6. cin >> a >> b;
  7. while(a) resa += a % 10, a /= 10;
  8. while(b) resb += b % 10, b /= 10;
  9. cout << max(resa, resb) << endl;
  10. return 0;
  11. }

B Gentle Pairs


  1. int n;
  2. int x[N], y[N];
  3. int main()
  4. {
  5. scanf("%d", &n);
  6. for(int i = 1; i <= n; ++ i) scanf("%d%d", &x[i], &y[i]);
  7. int res = 0;
  8. for(int i = 1; i <= n; ++ i)
  9. for(int j = i + 1; j <= n; ++ j)
  10. {
  11. if(x[i] - x[j] == 0) continue;
  12. if(x[i] - x[j] > 0)
  13. {
  14. if(y[i] - y[j] >= x[j] - x[i] && y[i] - y[j] <= x[i] - x[j])
  15. res ++;
  16. }
  17. if(x[i] - x[j] < 0)
  18. {
  19. if(y[i] - y[j] <= x[j] - x[i] && y[i] - y[j] >= x[i] - x[j])
  20. res ++;
  21. }
  22. }
  23. printf("%d\n", res);
  24. }

C 1-SAT


  1. int n;
  2. map mp;
  3. string str;
  4. int main()
  5. {
  6. IOS;
  7. cin >> n;
  8. for(int i = 1; i <= n; ++ i)
  9. {
  10. cin >> str;
  11. if(str[0] == '!' && mp.count(str.substr(1)))
  12. {
  13. cout << str.substr(1) << endl;
  14. return 0;
  15. }
  16. if(str[0] != '!' && mp.count("!" + str))
  17. {
  18. cout << str << endl;
  19. return 0;
  20. }
  21. mp[str] = 1;
  22. }
  23. puts("satisfiable");
  24. return 0;
  25. }

D Choose Me

不选时\(A += a_i\), \(B += 0\), 选时 \(A += 0\), \(B += a_i + b_i\)

先考虑都不选,每选择一个相当于从\(A\)中减去一个\(a_i\),\(B\)加一个\(a_i + b_i\),因为是比较大小关系,所以等价于\(A\)不动,\(B + 2 \times a_i + b_i\)


  1. int n;
  2. struct zt
  3. {
  4. int a, b;
  5. LL c;
  6. }t[N];
  7. bool cmp(zt a, zt b)
  8. {
  9. return a.c > b.c;
  10. }
  11. int main()
  12. {
  13. scanf("%d", &n);
  14. LL sum = 0, res = 0;
  15. for(int i = 1; i <= n; ++ i)
  16. {
  17. scanf("%d%d", &t[i].a, &t[i].b);
  18. t[i].c = t[i].a * 2 + t[i].b;
  19. sum += t[i].a;
  20. }
  21. sort(t + 1, t + n + 1, cmp);
  22. for(int i = 1; i <= n; ++ i)
  23. {
  24. res += t[i].c;
  25. if(res > sum) { printf("%d\n", i); break;}
  26. }
  27. return 0;
  28. }

E Through Path

树上差分

以1号点为根,预处理每个点的深度.

若对于深度大的点所在分支(即它的子树)全部\(+x\),只需要对该点\(+x\).

若对于深度小的点所在分支全部\(+x\),可以看成所有点\(+x\),深度大的点所在子树\(-x\),故维护一个所有点的增加值,并对深度大的点\(-x\).

最后遍历一遍子树把标记下传即可.


  1. int n, m;
  2. struct Edge
  3. {
  4. int to, nxt;
  5. }line[N * 2];
  6. int fist[N], idx;
  7. int dep[N];
  8. LL d[N], res;
  9. void add(int x, int y)
  10. {
  11. line[++ idx] = (Edge){y, fist[x]};
  12. fist[x] = idx;
  13. }
  14. void dfs(int u, int far)
  15. {
  16. for(int i = fist[u]; i != -1; i = line[i].nxt)
  17. {
  18. int v = line[i].to;
  19. if(v == far) continue;
  20. dep[v] = dep[u] + 1;
  21. dfs(v, u);
  22. }
  23. }
  24. void dfs2(int u, int far)
  25. {
  26. for(int i = fist[u]; i != -1; i = line[i].nxt)
  27. {
  28. int v = line[i].to;
  29. if(v == far) continue;
  30. d[v] += d[u];
  31. dfs2(v, u);
  32. }
  33. }
  34. int main()
  35. {
  36. memset(fist, -1, sizeof fist);
  37. scanf("%d", &n);
  38. for(int i = 1; i < n; ++ i)
  39. {
  40. int a, b;
  41. scanf("%d%d", &a, &b);
  42. add(a, b);
  43. add(b, a);
  44. }
  45. dfs(1, -1);
  46. scanf("%d", &m);
  47. for(int i = 1; i <= m; ++ i)
  48. {
  49. int t, e, x;
  50. scanf("%d%d%d", &t, &e, &x);
  51. int a = line[2 * e].to, b = line[2 * e - 1].to;
  52. if(dep[a] < dep[b] && t == 2) d[b] += x;
  53. if(dep[a] > dep[b] && t == 1) d[a] += x;
  54. if(dep[a] < dep[b] && t == 1) { d[b] -= x; res += x; }
  55. if(dep[a] > dep[b] && t == 2) { d[a] -= x; res += x; }
  56. }
  57. dfs2(1, -1);
  58. for(int i = 1; i <= n; ++ i) printf("%lld\n", d[i] + res);
  59. return 0;
  60. }

F Close Group

令f[i]表示状态i划分的团的个数集合中的最小值.

枚举i的子集s, f[i] = min(f[i], f[i - s] + f[s])


  1. int n, m;
  2. int conn[1 << N];
  3. int f[1 << N];
  4. int main()
  5. {
  6. scanf("%d%d", &n, &m);
  7. for(int i = 1; i <= m; ++ i)
  8. {
  9. int a, b;
  10. scanf("%d%d", &a, &b);
  11. a -- , b -- ;
  12. conn[a] |= (1 << b);
  13. conn[b] |= (1 << a);
  14. }
  15. for(int i = 0; i < n; ++ i) conn[i] |= (1 << i);
  16. memset(f, 0x3f, sizeof f);
  17. f[0] = 0;
  18. for(int i = 1; i < (1 << n); ++ i)
  19. {
  20. int flag = 1;
  21. for(int j = 0; j < n; ++ j)
  22. if(i & (1 << j) && (conn[j] & i) != i)
  23. {
  24. flag = 0;
  25. break;
  26. }
  27. if(flag) f[i] = 1;
  28. for(int s = i; s; s = (s - 1) & i)
  29. f[i] = min(f[i], f[i - s] + f[s]);
  30. }
  31. printf("%d\n", f[(1 << n) - 1]);
  32. return 0;
  33. }

2021.1.21

AtCoder Beginner Contest 187的更多相关文章

  1. AtCoder Beginner Contest 187 F - Close Group

    题目链接 点我跳转 题目大意 给你一张完全图,你可以删除任意数量的边 要求删除完后剩余的所有子图必须是完全图 问完全子图数量最少是多少 解题思路 定义 \(ok[i]\) 表示状态为 \(i\) 时所 ...

  2. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  3. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  4. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  5. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  6. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  7. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

  8. AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】

    AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...

  9. AtCoder Beginner Contest 064 D - Insertion

    AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...

随机推荐

  1. Ubuntu中Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend)问题的解决

    参考博客:https://blog.csdn.net/shimadear/article/details/90598646 问题描述: 解决方法: 第一种情况: 进程中存在与apt相关的正在运行的进程 ...

  2. 获取csc.exe路径

    using System.Runtime.InteropServices; var frameworkPath = RuntimeEnvironment.GetRuntimeDirectory(); ...

  3. Python基础--核心数据类型

    python的核心数据类型: Number 数字(整数,浮点数,复数,布尔型数) String 字符串 List 列表 Tuple 元组 Dictionary 字典 Set 集合 1. 整数(整型数) ...

  4. 【原创】docker & kubernetes问题总结

    1.entrypoint & cmd 指令的区别 这主要考察 Dockerfile 良好实践中关于容器启动时运行的命令. entrypoint 和 cmd 命令都是设置容器启动时要执行的命令, ...

  5. Nginx 服务介绍

    目录 静态 / 动态 Web 服务 Nginx 简介 Nginx 的优点 Nginx 和 Apache 的比较 Nginx 的安装 Nginx 相关文件 Nginx 主配置文件 Nginx 虚拟主机配 ...

  6. docker的底层-隔离的核心

    在了解底层原理之前: 说几个名词: 解耦状态: 所有东西都没有重复,任何东西都没有公用的地方. 半解耦状态:有部分共同的一起用,其他的独立 完全解耦状态: 就是各自都是独立没有重复. kvm:完全解耦 ...

  7. 【非原创】LightOJ-1274 Beating the Dataset【期望dp】

    学习博客:戳这里

  8. mysql 索引类型以及创建

    明天就去面浦发了,感觉对数据库有些忘了,时间紧迫,就直接把链接贴这了,有空再整理. 参考: 1. https://www.cnblogs.com/crazylqy/p/7615388.html

  9. LeetCode 算法面试题汇总

    LeetCode 算法面试题汇总 算法面试题 https://leetcode-cn.com/problemset/algorithms/ https://leetcode-cn.com/proble ...

  10. DOM & Node.contains

    DOM & Node.contains Node.contains() https://developer.mozilla.org/en-US/docs/Web/API/Node/contai ...