比赛链接:Here

1543A. Exciting Bets

math,

给定两个数字 Codeforces Round #730 (Div. 2) - 图1#card=math&code=a%2Cb%20%28a%2Cb%20%5Cle%201e18%29) 和以下两种操作:

  • Codeforces Round #730 (Div. 2) - 图2
  • Codeforces Round #730 (Div. 2) - 图3 并且 $ b > 0$

请问经过最少多少次操作能使得 Codeforces Round #730 (Div. 2) - 图4#card=math&code=GCD%28a%2Cb%29) 最大化

注意:Codeforces Round #730 (Div. 2) - 图5%3Dx#card=math&code=GCD%28x%2C0%29%3Dx)

输出 Codeforces Round #730 (Div. 2) - 图6)%2Cmin(cnt)#card=math&code=max%28GCD%28a%2Cb%29%29%2Cmin%28cnt%29)


  • 如果 Codeforces Round #730 (Div. 2) - 图7 那么直接输出 Codeforces Round #730 (Div. 2) - 图8
  • 否则,能获得的最大 Codeforces Round #730 (Div. 2) - 图9%20%3D%20%7Ca-b%7C#card=math&code=GCD%28a%2Cb%29%20%3D%20%7Ca-b%7C) ,对于实现次数为 Codeforces Round #730 (Div. 2) - 图10#card=math&code=min%28a%5C%20mod%5C%20g%2Cg%20-%20a%5C%20mod%5C%20g%29)

【AC Code】

  1. int main() {
  2. cin.tie(nullptr)->sync_with_stdio(false);
  3. int _; for (cin >> _; _--;) {
  4. ll a, b;
  5. cin >> a >> b;
  6. if (a == b)cout << "0 0\n";
  7. else {
  8. ll g = abs(a - b);
  9. ll m = min(a % g, g - a % g);
  10. cout << g << " " << m << "\n";
  11. }
  12. }
  13. }

1543B. Customising the Track

给定数组 Codeforces Round #730 (Div. 2) - 图11 ,给定以下操作:

可以把任意值的 Codeforces Round #730 (Div. 2) - 图12 转移给 Codeforces Round #730 (Div. 2) - 图13

求最小化 Codeforces Round #730 (Div. 2) - 图14


要最小化 Codeforces Round #730 (Div. 2) - 图15 ,简单贪 Codeforces Round #730 (Div. 2) - 图16

如果 数组数值总和不能平均分配则把不能平均分配的数都化 1

【AC Code】

  1. int main() {
  2. cin.tie(nullptr)->sync_with_stdio(false);
  3. int _; for (cin >> _; _--;) {
  4. int n; cin >> n;
  5. ll sum = 0;
  6. for (int i = 0; i < n; ++i) {
  7. ll x; cin >> x;
  8. sum += x;
  9. }
  10. ll t = sum / n, tt = sum % n;
  11. cout << sum % n * (n - (sum - t * n)) << "\n";
  12. }
  13. }

1543C. Need for Pink Slips

(题意太长,翻译不过来)


精度!精度!还是精度!

能用long double就不用 double

【AC Code】

  1. using ld = long double;
  2. const ld eps = 1e-9;
  3. const ld scale = 1e+6;
  4. ld solve(int c, int m, int p, int v) {
  5. ld ans = p / scale;
  6. if (c > 0) {
  7. if (c > v) {
  8. if (m > 0) ans += (c / scale) * (1 + solve(c - v, m + v / 2, p + v / 2, v));
  9. else ans += (c / scale) * (1 + solve(c - v, 0, p + v, v));
  10. } else {
  11. if (m > 0) ans += (c / scale) * (1 + solve(0, m + c / 2, p + c / 2, v));
  12. else ans += (c / scale) * (1 + solve(0, 0, p + c, v));
  13. }
  14. }
  15. if (m > 0) {
  16. if (m > v) {
  17. if (c > 0) ans += (m / scale) * (1 + solve(c + v / 2, m - v, p + v / 2, v));
  18. else ans += (m / scale) * (1 + solve(0, m - v, p + v, v));
  19. } else {
  20. if ( c > 0) ans += (m / scale) * (1 + solve(c + m / 2, 0, p + m / 2, v));
  21. else ans += (m / scale) * (1 + solve(0, 0, p + m, v));
  22. }
  23. }
  24. return ans;
  25. }
  26. int main() {
  27. cin.tie(nullptr)->sync_with_stdio(false);
  28. int _; for (cin >> _; _--;) {
  29. ld cd, md, pd, vd;
  30. cin >> cd >> md >> pd >> vd;
  31. int c = round(cd * scale);
  32. int m = round(md * scale);
  33. int p = round(pd * scale);
  34. int v = round(vd * scale);
  35. ld ans = solve(c, m, p, v);
  36. cout << setprecision(12) << fixed << ans << "\n";
  37. }
  38. }

1543D1. RPD and Rap Sheet (Easy Version)

(说实话,没看懂这题;

赛后学习一下 Pecco神 的代码

【AC Code】

  1. int main() {
  2. cin.tie(nullptr)->sync_with_stdio(false);
  3. int _; for (cin >> _; _--;) {
  4. int n, x, s = 0;
  5. cin >> n >> x;
  6. for (int i = 0; i < n; ++i) {
  7. int y = (i ^ s), ok;
  8. cout << y << "\n"
  9. << flush;
  10. cin >> ok;
  11. if (ok) break;
  12. s ^= y;
  13. }
  14. }
  15. }