A. Arithmetic Array

题目大意:一串数,求添加多少个非负整数后平均值为1

代码:

  1. //CF726A
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
  5. typedef long long ll;
  6. #define INF 0x3f3f3f3f
  7. const double EPS = 1e-18;
  8. const int MOD = 1e9 + 7;
  9. const int maxn = 1e5 + 1;
  10. int T, N;
  11. void solve()
  12. {
  13. int num;
  14. int sum = 0;
  15. for (int i = 0; i < N; i++)
  16. {
  17. cin >> num;
  18. sum += num;
  19. }
  20. if (sum == N)
  21. cout << 0 << endl;
  22. else if (sum < N)
  23. cout << 1 << endl;
  24. else
  25. cout << sum - N << endl;
  26. }
  27. int main()
  28. {
  29. IOS;
  30. cin >> T;
  31. while (T--)
  32. {
  33. cin >> N;
  34. solve();
  35. }
  36. return 0;
  37. }

B. Bad Boy

题目大意:一个NxM的区域,一个人在(i,j),只能向上下左右移动,区域内有两个球,求球的位置使得这个人拿回两个球后回到起始位置的路程最长。

思路:放在区域的对角就一定最远。

代码:

  1. //CF726B
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
  5. typedef long long ll;
  6. #define INF 0x3f3f3f3f
  7. const double EPS = 1e-18;
  8. const int MOD = 1e9 + 7;
  9. const int maxn = 1e5 + 1;
  10. int T, N, M, i, j;
  11. void solve()
  12. {
  13. cout << 1 << ' ' << 1 << ' ' << N << ' ' << M << ' ' << endl;
  14. }
  15. int main()
  16. {
  17. IOS;
  18. cin >> T;
  19. while (T--)
  20. {
  21. cin >> N >> M >> i >> j;
  22. solve();
  23. }
  24. return 0;
  25. }

C. Challenging Cliffs

题目大意:一个n个数的序列h,相差最小的两个数必须放在一头一尾,给出一个序列,使得满足h[i]<=h[i+1]的i最多。

思路:排序,然后找出相差最小的两个数h[i],h[j](j=i+1)放在一头一尾,之后在二者之间先输出大于h[j]的数,再输出小于h[i]的数即可,这样只有1处会不满足,所以满足条件的i的个数为n-2。

代码:

  1. //CF726C
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
  5. typedef long long ll;
  6. #define INF 0x3f3f3f3f
  7. const double EPS = 1e-18;
  8. const int MOD = 1e9 + 7;
  9. const int maxn = 2e5 + 10;
  10. int T, N, h[maxn];
  11. void solve()
  12. {
  13. sort(h, h + N);
  14. int si = -1, ti = -1;
  15. int s, t, dmin = INF;
  16. for (int i = 1; i < N; i++)
  17. {
  18. if (h[i] - h[i - 1] < dmin)
  19. {
  20. dmin = h[i] - h[i - 1];
  21. s = h[i - 1];
  22. t = h[i];
  23. si = i - 1;
  24. ti = i;
  25. }
  26. }
  27. cout << s << ' ';
  28. for (int i = ti + 1; i < N; i++)
  29. cout << h[i] << ' ';
  30. for (int i = 0; i < si; i++)
  31. cout << h[i] << ' ';
  32. cout << t << endl;
  33. }
  34. int main()
  35. {
  36. IOS;
  37. cin >> T;
  38. while (T--)
  39. {
  40. cin >> N;
  41. for (int i = 0; i < N; i++)
  42. cin >> h[i];
  43. solve();
  44. }
  45. return 0;
  46. }

D. Deleting Divisors

题目大意:Alice和Bob玩游戏。Alice先手,一开始有一个数字N,每次可以让N减去除N与1以外的约数,如果无法操作则判负。

思路:显然当N转化为质数的时候就会输,过程中N总共会有3种情况:

1) 奇数

2)偶数但不是2的幂

3) 2的幂

先考虑N为奇数的情况,此时N的所有约数也都为奇数,所以在减去一个约数之后N就变为了偶数,而且设N=a*b,减去a之后为a(b-1),a仍是奇数,所以此时的N是虽然是偶数但不是2的幂,所以N有奇约数,即第一种情况只能转化为第二种情况。而第二种情况只要拿掉一个约数就可以回到情况1。又因为除了2之外的质数全部都是奇数,所以当N为奇数时,先手必败,而对称地,当N为偶数但不是2的幂时,后手必败。

而对于第三种情况,设N=2^k,能够减去的约数只能是2^m(m<k),移去后N变为2^m(2^(k-m)-1)

因为如果操作后转化为情况二就自己就必败了,所以只能让N继续转化为情况三,也就是只能移去约数2^(k-1),让N=N/2。因为2^1为质数,所以当N为2的奇数次幂时,先手必败,为2的偶数次幂时,后手必败。

代码:

  1. //CF726D
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
  5. typedef long long ll;
  6. #define A "Alice"
  7. #define B "Bob"
  8. #define INF 0x3f3f3f3f
  9. const double EPS = 1e-18;
  10. const int MOD = 1e9 + 7;
  11. const int maxn = 1e9 + 10;
  12. int T, N;
  13. void solve()
  14. {
  15. if (N % 2)
  16. cout << B << endl;
  17. else
  18. {
  19. int x = 0;
  20. while (!(N % 2) && N >= 2)
  21. {
  22. N /= 2;
  23. x++;
  24. }
  25. if (N != 1)
  26. cout << A << endl;
  27. else
  28. {
  29. if (x % 2)
  30. cout << B << endl;
  31. else
  32. cout << A << endl;
  33. }
  34. }
  35. }
  36. int main()
  37. {
  38. IOS;
  39. cin >> T;
  40. while (T--)
  41. {
  42. cin >> N;
  43. solve();
  44. }
  45. return 0;
  46. }

E1. Erase and Extend (Easy Version)

题目大意:有一个长为N的字符串,有两种操作:1)将字符串复制一份接在后面成为一个新的字符串,2)删去字符串末尾的字符,以上操作不限次数,求若干次操作后生成的字典序最小的长度为K的字符串。

思路:因为N,K比较小,所以可以遍历初始字符串的所有前缀。不断执行操作1,直到长度>=K,之后再进行若干次操作2,将每个前缀如此操作后所得的字符串作比较,字典序最小的就是答案了。

因为对于每个前缀,如果说在若干次操作1)之间差入几次操作2)所得的字符串的字典序会更小,那么就说明该前缀的某一前缀字典序小于其某一等长后缀。那么就显然对于初始串的一个更短的前缀值行之前的操作要比这种情况还要更优,所以尽管对于每个前缀所得字符串不是最优的,但是遍历所有前缀之后不会错过最优解。

代码:

  1. //CF-726.E1
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
  5. typedef long long ll;
  6. #define INF 0x3f3f3f3f
  7. const double EPS = 1e-18;
  8. const int MOD = 1e9 + 7;
  9. const int maxn = 1e5 + 1;
  10. int N, K;
  11. string s;
  12. string ans;
  13. void dfs(int k, string str)
  14. {
  15. if (str.size() > k)
  16. {
  17. if (ans.empty())
  18. ans = str.substr(0, k);
  19. else
  20. ans = min(ans, str.substr(0, k));
  21. return;
  22. }
  23. dfs(k, str + str);
  24. }
  25. void solve()
  26. {
  27. for (int i = N; i > 0; i--)//for each prefix
  28. dfs(K, s.substr(0, i));
  29. cout << ans << endl;
  30. }
  31. int main()
  32. {
  33. IOS;
  34. cin >> N >> K >> s;
  35. solve();
  36. return 0;
  37. }

Codeforces Round #726 (Div.2) A-E1 题解的更多相关文章

  1. Codeforces Round #612 (Div. 2) 前四题题解

    这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...

  2. Codeforces Round #198 (Div. 2)A,B题解

    Codeforces Round #198 (Div. 2) 昨天看到奋斗群的群赛,好奇的去做了一下, 大概花了3个小时Ak,我大概可以退役了吧 那下面来稍微总结一下 A. The Wall Iahu ...

  3. Codeforces Round #672 (Div. 2) A - C1题解

    [Codeforces Round #672 (Div. 2) A - C1 ] 题目链接# A. Cubes Sorting 思路: " If Wheatley needs more th ...

  4. Codeforces Round #614 (Div. 2) A-E简要题解

    链接:https://codeforces.com/contest/1293 A. ConneR and the A.R.C. Markland-N 题意:略 思路:上下枚举1000次扫一遍,比较一下 ...

  5. Codeforces Round #610 (Div. 2) A-E简要题解

    contest链接: https://codeforces.com/contest/1282 A. Temporarily unavailable 题意: 给一个区间L,R通有网络,有个点x,在x+r ...

  6. Codeforces Round #611 (Div. 3) A-F简要题解

    contest链接:https://codeforces.com/contest/1283 A. Minutes Before the New Year 题意:给一个当前时间,输出离第二天差多少分钟 ...

  7. Codeforces Round #499 (Div. 2) D. Rocket题解

    题目: http://codeforces.com/contest/1011/problem/D This is an interactive problem. Natasha is going to ...

  8. Codeforces Round #499 (Div. 2) C Fly题解

    题目 http://codeforces.com/contest/1011/problem/C Natasha is going to fly on a rocket to Mars and retu ...

  9. Codeforces Round #198 (Div. 2)C,D题解

    接着是C,D的题解 C. Tourist Problem Iahub is a big fan of tourists. He wants to become a tourist himself, s ...

随机推荐

  1. 开源办公套件DzzOffice安装教程

    DzzOffice开源办公套件 DzzOffice是一套开源办公套件,适用于企业.团队搭建自己的 类似"Google企业应用套件"."微软Office365"的 ...

  2. Java 锁 概念介绍

    一   Java中的锁是什么? /* * 一 Java锁定义? * 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制. * 锁旨在强制 ...

  3. Python Study Note 1

    Learn The First Day OF Operation Notes

  4. JS 数据类型与运算符

    以下内容均整理自:廖雪峰老师的JS教程 非常感谢廖老师! 统一使用var声明即可,JS会自动判断类型. 数据类型 1. Number JavaScript不区分整数和浮点数,统一用Number表示,以 ...

  5. JAVA变量的数据类型

    1. 整型 byte   代表一个字节的大小   8bit  2(8)   -128~127        256 short  代表两个字节的大小  16bit  2(16)  -2(15)~2(1 ...

  6. Docker入门 安装 基础操作命令

    Docker 学习来源 https://www.bilibili.com/video/av26993050/?spm_id_from=333.788.b_636f6d6d656e74.20 https ...

  7. docker 介绍及安装操作

    docker 介绍及安装操作 1.docker概述 2.docker安装及操作 1.docker概述: Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源 是在L ...

  8. JQgrid实现全表单元格编辑

    1 jQuery("#baseWageDataValueGrid").jqGrid('setGridParam',{'cellEdit':true}); 2 3 //修改所有td ...

  9. 统计学习:逻辑回归与交叉熵损失(Pytorch实现)

    1. Logistic 分布和对率回归 监督学习的模型可以是概率模型或非概率模型,由条件概率分布\(P(Y|\bm{X})\)或决 策函数(decision function)\(Y=f(\bm{X} ...

  10. Docker prefereces

    https://docs.docker.com/docker-for-mac/#preferences-menu docker 的镜像命令需要抽时间了解