Atcoder ABC138

A .Red or Not

一道网速题。

大于3200输出原字符串,否则就输出red。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define LL long long
  7. int a;
  8. string ch;
  9. int main() {
  10. scanf("%d",&a);
  11. cin>>ch;
  12. if(a >= 3200) cout<<ch;
  13. else puts("red");
  14. //system("pause");
  15. return 0;
  16. }

B. Resistors in Parallel

这不是网速题了,是一道手速题。(滑稽.jpg)

直接暴力求所有数的倒数和,再对所有数的倒数和取倒数就行了,不用考虑精度问题。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #define N 120
  6. using namespace std;
  7. int a[N],n;
  8. double s;
  9. int main() {
  10. cin >> n;
  11. for(int i = 1 ; i <= n ; i++) {
  12. double x ;
  13. cin>>x ;
  14. x = 1 / x ;
  15. s += x ;
  16. }
  17. cout<<1 / s<<endl;
  18. system("pause");
  19. return 0;
  20. }

C. Alchemist

比之前的两道题要略难一点。

考虑对数组从小到大进行一次排序,然后每次贪心的取两个最小的值。

答案就是最后修改的值。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define LL long long
  7. #define N 1010
  8. int a[N],n;
  9. double b[N];
  10. int main() {
  11. scanf("%d",&n);
  12. for(int i = 1 ; i <= n ; i++)
  13. scanf("%d",&a[i]);
  14. sort(a + 1,a + n + 1);
  15. int p1 = 2,p2 = 3;
  16. b[p1] = ((double)a[1] + (double)a[2]) / 2;
  17. while(p2 <= n) {
  18. //printf("%d %d\n",&a[p1],&a[p2]);
  19. b[p2] = ((double)b[p1] + (double)a[p2]) / 2;
  20. // printf("%lf \n",b[p2]);
  21. p1++,p2++;
  22. //printf("%d %d \n",p1,p2);
  23. }
  24. //for(int i = 1 ; i <= n ; i++) printf("%d ",a[i]);
  25. printf("%lf \n",b[n]);
  26. //system("pause");
  27. return 0;
  28. }

D.Strings of Impurity

数据只有2e6,所以就是一道树链剖分ZZ题。

只需要写子树修改和链查询就可以。

题目中要求的单点查询可以看作查询自己到自己这条链的权值。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define LL long long
  7. #define N 1000010
  8. struct Edge {
  9. int to,from;
  10. }e[N*2+10];
  11. struct Tree {
  12. int sum,tag;
  13. int lson,rson;
  14. }tree[N*2];
  15. int deep[N],Top[N],idx[N],siz[N];
  16. int n,m,p,root,son[N],tot = 1,cnt;
  17. int head[N],fa[N],val[N],w[N],t;
  18. inline void add_edge(int x,int y) {
  19. e[++cnt].from = y;
  20. e[cnt].to = head[x];
  21. head[x] = cnt;
  22. }
  23. inline void pushup(int x) {
  24. tree[x].sum = (tree[tree[x].lson].sum + tree[tree[x].rson].sum);
  25. }
  26. void pushdown(int x,int l,int r) {
  27. int mid = (l + r) >> 1;
  28. tree[tree[x].lson].sum = (tree[tree[x].lson].sum + tree[x].tag * (mid - l + 1));
  29. tree[tree[x].rson].sum = (tree[tree[x].rson].sum + tree[x].tag * (r - mid));
  30. tree[tree[x].lson].tag = (tree[tree[x].lson].tag + tree[x].tag);
  31. tree[tree[x].rson].tag = (tree[tree[x].rson].tag + tree[x].tag);
  32. tree[x].tag = 0;
  33. }
  34. void build(int x,int l,int r) {
  35. if(l == r) {
  36. tree[x].sum = w[l];
  37. return;
  38. }
  39. int mid = (l + r) >> 1;
  40. tree[x].lson = ++tot;
  41. build(tree[x].lson,l,mid);
  42. tree[x].rson = ++tot;
  43. build(tree[x].rson,mid+1,r);
  44. pushup(x);
  45. }
  46. void update(int x,int l,int r,int ll,int rr,int v) {
  47. if(l == ll && r == rr) {
  48. tree[x].sum = (tree[x].sum + (r - l + 1) * v);
  49. tree[x].tag = (tree[x].tag + v);
  50. return;
  51. }
  52. int mid = (l + r) >> 1;
  53. pushdown(x,l,r);
  54. if(rr <= mid) update(tree[x].lson,l,mid,ll,rr,v);
  55. else if(ll > mid) update(tree[x].rson,mid+1,r,ll,rr,v);
  56. else {
  57. update(tree[x].lson,l,mid,ll,mid,v);
  58. update(tree[x].rson,mid+1,r,mid+1,rr,v);
  59. }
  60. pushup(x);
  61. }
  62. inline int query(int x,int l,int r,int ll,int rr) {
  63. if(l == ll && r == rr) return tree[x].sum;
  64. int mid = (l + r) >> 1;
  65. pushdown(x,l,r);
  66. if(rr <= mid) return query(tree[x].lson,l,mid,ll,rr);
  67. else if(ll > mid) return query(tree[x].rson,mid + 1,r,ll,rr);
  68. else return (query(tree[x].lson,l,mid,ll,mid) + query(tree[x].rson,mid + 1,r,mid + 1,rr));
  69. }
  70. void dfs1(int x,int f,int depth) {
  71. fa[x] = f;
  72. siz[x] = 1;
  73. deep[x] = depth;
  74. int maxs = -1;
  75. for(int i = head[x] ; i ; i = e[i].to) {
  76. int u = e[i].from;
  77. if(u == f) continue;
  78. dfs1(u,x,depth + 1);
  79. siz[x] += siz[u];
  80. if(siz[u] > maxs) {
  81. son[x] = u;
  82. maxs = siz[u];
  83. }
  84. }
  85. }
  86. void dfs2(int x,int topf) {
  87. idx[x] = ++t;
  88. w[t] = val[x];
  89. Top[x] = topf;
  90. if(!son[x]) return;
  91. dfs2(son[x],topf);
  92. for(int i = head[x] ; i ; i = e[i].to) {
  93. int u = e[i].from;
  94. if(u == son[x] || u == fa[x]) continue;
  95. dfs2(u,u);
  96. }
  97. }
  98. inline int query_link(int x,int y) {
  99. int ans = 0;
  100. while(Top[x] != Top[y]) {
  101. if(deep[Top[x]] < deep[Top[y]]) swap(x,y);
  102. ans += query(1,1,n,idx[Top[x]],idx[x]);
  103. ans %= p;
  104. x = fa[Top[x]];
  105. }
  106. if(deep[x] > deep[y]) swap(x,y);
  107. ans = (ans + query(1,1,n,idx[x],idx[y]));
  108. return ans;
  109. }
  110. inline void update_link(int x,int y,int val) {
  111. while(Top[x] != Top[y]) {
  112. if(deep[Top[x]] < deep[Top[y]]) swap(x,y);
  113. update(1,1,n,idx[Top[x]],idx[x],val);
  114. x = fa[Top[x]];
  115. }
  116. if(deep[x] > deep[y]) swap(x,y);
  117. update(1,1,n,idx[x],idx[y],val);
  118. }
  119. inline int query_tree(int x) {
  120. return query(1,1,n,idx[x],idx[x] + siz[x] - 1);
  121. }
  122. inline void update_tree(int x,int val) {
  123. update(1,1,n,idx[x],idx[x] + siz[x] - 1,val);
  124. }
  125. int main() {
  126. scanf("%d%d",&n,&m);
  127. for(int i = 1 ; i < n ; i++) {
  128. int a,b;
  129. scanf("%d%d",&a,&b);
  130. add_edge(a,b);
  131. add_edge(b,a);
  132. }
  133. dfs1(1,0,1);
  134. dfs2(1,1);
  135. build(1,1,n);
  136. while(m--) {
  137. int x,z;
  138. scanf("%d%d",&x,&z);
  139. update_tree(x,z);
  140. }
  141. for(int i = 1 ; i <= n ; i++)
  142. printf("%d ",query_link(i,i));
  143. //system("pause");
  144. return 0;
  145. }

E.Strings of Impurity

一道字符串题。

我们考虑在s串中查询t串中的每个字符出现的位置,统计出现了多少次,即统计需要循环s串多少次。

那么答案就是 $ cnt * s.length() + pos $ 。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<string>
  6. using namespace std;
  7. #define LL long long
  8. string s,t;
  9. LL pos,cnt;
  10. int main() {
  11. cin>>s>>t;
  12. for(int i = 0 ; i < t.length() ; i++) {
  13. pos = s.find(t[i],pos);
  14. if(pos == -1) {
  15. pos = s.find(t[i],0);
  16. if(pos == -1) {
  17. puts("-1");
  18. return 0;
  19. }
  20. cnt++;
  21. }
  22. pos++;
  23. }
  24. LL ans = cnt * s.length() + pos;
  25. printf("%lld \n",ans);
  26. //system("pause");
  27. return 0;
  28. }

F.Coincidence

一道极端恶心的DP题。

设 $ dp[i][0/1][0/1] $ 表示考虑到当前位置i,满足 $ x \geq L $ , 并且满足 $ y \leq R $ 的方案数。

因为数据上界为 $ 10^{18} $ ,不能直接存,所以我们考虑利用2进制,数组的第一维代表到 $ 2^i $ 的位置。

此时数组只需要开 $ dp[65][2][2] $ ,第一维只有65是因为 $ 2^{60} \geq 10^{18}$ 。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define LL long long
  7. const int mod = 1e9 + 7;
  8. LL dp[66][2][2],L, R;
  9. LL dfs(int x, bool Left, bool Right, bool zero) {
  10. if(x < 0) return 1;
  11. if(dp[x][Left][Right] >= 0 && !zero)
  12. return dp[x][Left][Right];
  13. LL ans = 0;
  14. int l = 0, r = 1;
  15. if(Left) l = L >> x & 1;
  16. if(Right) r = R >> x & 1;
  17. for(int i = l ; i <= 1 ; i++) {
  18. for (int j = i ; j <= r ; j++) {
  19. if (j == 1 && zero) {
  20. if(i == 1) ans += dfs(x-1, Left && i == l, Right && j == r, zero && j == 0);
  21. }
  22. else ans += dfs(x-1, Left && i == l, Right && j == r, zero && j == 0);
  23. }
  24. }
  25. ans %= mod;
  26. if(!zero) dp[x][Left][Right] = ans;
  27. return ans;
  28. }
  29. int main() {
  30. scanf("%lld%lld", & L, & R);
  31. memset(dp, -1, sizeof(dp));
  32. printf("%lld \n", dfs(60, 1, 1, 1));
  33. //system("pause");
  34. return 0;
  35. }

Atcoder ABC138的更多相关文章

  1. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  2. AtCoder Grand Contest 001 C Shorten Diameter 树的直径知识

    链接:http://agc001.contest.atcoder.jp/tasks/agc001_c 题解(官方): We use the following well-known fact abou ...

  3. AtCoder Regular Contest 082

    我都出了F了……结果并没有出E……atcoder让我差4分上橙是啥意思啊…… C - Together 题意:把每个数加1或减1或不变求最大众数. #include<cstdio> #in ...

  4. AtCoder Regular Contest 069 D

    D - Menagerie Time limit : 2sec / Memory limit : 256MB Score : 500 points Problem Statement Snuke, w ...

  5. AtCoder Regular Contest 076

    在湖蓝跟衡水大佬们打的第二场atcoder,不知不觉一星期都过去了. 任意门 C - Reconciled? 题意:n只猫,m只狗排队,猫与猫之间,狗与狗之间是不同的,同种动物不能相邻排,问有多少种方 ...

  6. AtCoder Grand Contest 016

    在雅礼和衡水的dalao们打了一场atcoder 然而窝好菜啊…… A - Shrinking 题意:定义一次操作为将长度为n的字符串变成长度n-1的字符串,且变化后第i个字母为变化前第i 或 i+1 ...

  7. AtCoder Beginner Contest 069【A,水,B,水,C,数学,D,暴力】

    A - K-City Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement In K-city, ...

  8. AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle

    https://beta.atcoder.jp/contests/abc075/tasks/abc075_d 题意: 给出坐标平面上n个点的坐标,要求找到一个面积最小的矩形使得这个矩形的边界加上内部的 ...

  9. AtCoder Beginner Contest 073

    D - joisino's travel Time Limit: 2 sec / Memory Limit: 256 MB Score : 400400 points Problem Statemen ...

随机推荐

  1. 微信公众号支付备忘及填坑之路-java

    一.背景 最近公司给第三方开发了一个公众号,其中最重要的功能是支付,由于是第一次开发,遇到的坑特别的多,截止我写博客时,支付已经完成,在这里我把遇到的坑记录一下(不涉及退款).不得不吐槽一下,腾讯这么 ...

  2. sqlserver跨库操作数据

    垮库只能读操作,写操作需要设置权限. USE [jdddb] GO /****** Object: StoredProcedure [dbo].[proc_LYOrderCancel] Script ...

  3. [转载]IMDB文件格式

    [转载]IMDB文件格式 来源:LMDB的全称是Lightning Memory-Mapped Database,闪电般的内存映射数据库.它文件结构简单,一个文件夹,里面一个数据文件,一个锁文件.数据 ...

  4. .NET 反射应用

    object request = null; string requestObjClassName = "命名空间" + 类型.ToString(); Type type = Ty ...

  5. c#如何使用MemoryStream和BinaryFormatter进行对象的序列化和返序列化

    1 下面是我写的一个序列化的类 public static class ObjSerialize { /// <summary> /// 将对象数组obj序列化,内存中的缓冲区的数据序列化 ...

  6. 文件 file open函数的打开及 函数的调用

    文件 mode 模式字符的含义 字符 含义 'r' 以只读方式打开(默认) 'w' 以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开) 'x' 创建一个新文件, 并以写模 ...

  7. maskrcnn-benchmark错误:ImportError: cannot import name rnn_compat

    错误: from apex import amp File "build/bdist.linux-x86_64/egg/apex/__init__.py", line 5, in ...

  8. 10_Hive自定义函数UDF

    Hive官方的UDF手册地址是:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF 1.使用内置函数的快捷方法: 创 ...

  9. HandlerMethodArgumentResolver完美解决 springmvc注入参数多传报错

    作为一个后端开发,能友好兼容前端参数传入错误等问题,在前端发布不小心多传一个参数导致系统错误的问题,一个广告系统是零容忍的,所以为了不犯错误,后端接收参数必须摒弃spring 的自动注入@Reques ...

  10. 5.caffe图片分类流程

    一次创建下列文件: 1,create_txt.sh (create_filelist.sh) 2,create_lmdb.sh 3,make_mean.sh 4,train.prototxt+val. ...