Codeforces Round #186 (Div. 2)A、B、C、D、E

举报
xindoo 发表于 2022/04/16 02:13:34 2022/04/16
【摘要】 A.Ilya and Bank Account Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。 //codeforces 313A //2013-05-31-13.47#include <stdio.h>#include <algorithm>u...

A.Ilya and Bank Account

Ilya得到了一个礼物,可以在删掉银行账户最后和倒数第二位的数字(账户有可能是负的),也可以不做任何处理。


  
  1. //codeforces 313A
  2. //2013-05-31-13.47
  3. #include <stdio.h>
  4. #include <algorithm>
  5. using namespace std;
  6. int main()
  7. {
  8. int n;
  9. scanf("%d", &n);
  10. if (n)
  11. {
  12. if (n >= 0)
  13. {
  14. printf("%d\n", n);
  15. }
  16. else
  17. {
  18. n = -n;
  19. int a = n/10;
  20. int b = n/100 * 10 + n%10;
  21. printf("%d\n", -min(a, b));
  22. }
  23. }
  24. return 0;
  25. }

B.Ilya and Queries

给你一个字符串,然后有M个询问,寻问的是从l到r之间有多少对字符串满足 s[i] == s[i+1]。

简单的树状数组题目


  
  1. //codeforces 313 B
  2. //2013-05-31-14.15
  3. #include <stdio.h>
  4. #include <string.h>
  5. const int maxn = 100005;
  6. char s[maxn];
  7. int a[maxn];
  8. int n;
  9. inline int lowbit(int x)
  10. {
  11. return x&-x;
  12. }
  13. void update(int x)
  14. {
  15. while (x <= n)
  16. {
  17. a[x] += 1;
  18. x += lowbit(x);
  19. }
  20. }
  21. int getsum(int x)
  22. {
  23. int sum = 0;
  24. while (x)
  25. {
  26. sum += a[x];
  27. x -= lowbit(x);
  28. }
  29. return sum;
  30. }
  31. int main()
  32. {
  33. while (scanf("%s", s) != EOF)
  34. {
  35. int m, l, r;
  36. n = strlen(s);
  37. memset(a, 0, sizeof(a));
  38. for (int i = 0; i < n-1; i++)
  39. {
  40. if (s[i] == s[i+1])
  41. update(i+1);
  42. }
  43. scanf("%d", &m);
  44. while (m--)
  45. {
  46. scanf("%d %d", &l, &r);
  47. printf("%d\n", getsum(r-1) - getsum(l-1));
  48. }
  49. }
  50. return 0;
  51. }

C.Ilya and Matrix

给你4^n个数,让你放进那个2^n * 2^n的矩阵里让这个矩阵beauty值最大,beauty值的计算方法题里说了。。。

The beauty of a 2n × 2n-sized matrix is an integer, obtained by the following algorithm:


Find the maximum element in the matrix. Let's denote it as m.
If n = 0, then the beauty of the matrix equals m. Otherwise, a matrix can be split into 4 non-intersecting 2n - 1 × 2n - 1-sized submatrices, then the beauty of the matrix equals the sum of number m and other four beauties of the described submatrices.

As you can see, the algorithm is recursive

贪心吧,贪心就行,排个序解决了


  
  1. //codeforces 313c
  2. //2013-06-03-15.55
  3. #include <stdio.h>
  4. #include <algorithm>
  5. using namespace std;
  6. const int maxn = 2*1000006;
  7. __int64 a[maxn];
  8. bool cmp(int x, int y)
  9. {
  10. return x > y;
  11. }
  12. int main()
  13. {
  14. int n;
  15. while (scanf("%d", &n) != EOF)
  16. {
  17. for (int i = 1; i <= n; i++)
  18. scanf("%I64d", &a[i]);
  19. sort(a+1, a+n+1, cmp);
  20. int x = n;
  21. __int64 ans = 0;
  22. while (x)
  23. {
  24. for (int i = 1; i <= x; i++)
  25. ans += a[i];
  26. x /= 4;
  27. }
  28. printf("%I64d\n", ans);
  29. }
  30. return 0;
  31. }

D.Ilya and Roads


E.Ilya and Two Numbers

文章来源: xindoo.blog.csdn.net,作者:xindoo,版权归原作者所有,如需转载,请联系作者。

原文链接:xindoo.blog.csdn.net/article/details/9000153

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。