比赛链接:Here
1543A. Exciting Bets
math,
给定两个数字 #card=math&code=a%2Cb%20%28a%2Cb%20%5Cle%201e18%29) 和以下两种操作:
并且 $ b > 0$
请问经过最少多少次操作能使得 #card=math&code=GCD%28a%2Cb%29) 最大化
注意:%3Dx#card=math&code=GCD%28x%2C0%29%3Dx)
输出 )%2Cmin(cnt)#card=math&code=max%28GCD%28a%2Cb%29%29%2Cmin%28cnt%29)
- 如果
那么直接输出
- 否则,能获得的最大
%20%3D%20%7Ca-b%7C#card=math&code=GCD%28a%2Cb%29%20%3D%20%7Ca-b%7C) ,对于实现次数为
#card=math&code=min%28a%5C%20mod%5C%20g%2Cg%20-%20a%5C%20mod%5C%20g%29)
【AC Code】
int main() {cin.tie(nullptr)->sync_with_stdio(false);int _; for (cin >> _; _--;) {ll a, b;cin >> a >> b;if (a == b)cout << "0 0\n";else {ll g = abs(a - b);ll m = min(a % g, g - a % g);cout << g << " " << m << "\n";}}}
1543B. Customising the Track
给定数组 ,给定以下操作:
可以把任意值的 转移给
求最小化
要最小化 ,简单贪
如果 数组数值总和不能平均分配则把不能平均分配的数都化 1
【AC Code】
int main() {cin.tie(nullptr)->sync_with_stdio(false);int _; for (cin >> _; _--;) {int n; cin >> n;ll sum = 0;for (int i = 0; i < n; ++i) {ll x; cin >> x;sum += x;}ll t = sum / n, tt = sum % n;cout << sum % n * (n - (sum - t * n)) << "\n";}}
1543C. Need for Pink Slips
(题意太长,翻译不过来)
精度!精度!还是精度!
能用
long double就不用double
【AC Code】
using ld = long double;const ld eps = 1e-9;const ld scale = 1e+6;ld solve(int c, int m, int p, int v) {ld ans = p / scale;if (c > 0) {if (c > v) {if (m > 0) ans += (c / scale) * (1 + solve(c - v, m + v / 2, p + v / 2, v));else ans += (c / scale) * (1 + solve(c - v, 0, p + v, v));} else {if (m > 0) ans += (c / scale) * (1 + solve(0, m + c / 2, p + c / 2, v));else ans += (c / scale) * (1 + solve(0, 0, p + c, v));}}if (m > 0) {if (m > v) {if (c > 0) ans += (m / scale) * (1 + solve(c + v / 2, m - v, p + v / 2, v));else ans += (m / scale) * (1 + solve(0, m - v, p + v, v));} else {if ( c > 0) ans += (m / scale) * (1 + solve(c + m / 2, 0, p + m / 2, v));else ans += (m / scale) * (1 + solve(0, 0, p + m, v));}}return ans;}int main() {cin.tie(nullptr)->sync_with_stdio(false);int _; for (cin >> _; _--;) {ld cd, md, pd, vd;cin >> cd >> md >> pd >> vd;int c = round(cd * scale);int m = round(md * scale);int p = round(pd * scale);int v = round(vd * scale);ld ans = solve(c, m, p, v);cout << setprecision(12) << fixed << ans << "\n";}}
1543D1. RPD and Rap Sheet (Easy Version)
(说实话,没看懂这题;
赛后学习一下 Pecco神 的代码
【AC Code】
int main() {cin.tie(nullptr)->sync_with_stdio(false);int _; for (cin >> _; _--;) {int n, x, s = 0;cin >> n >> x;for (int i = 0; i < n; ++i) {int y = (i ^ s), ok;cout << y << "\n"<< flush;cin >> ok;if (ok) break;s ^= y;}}}
