codeforces round 961题解(A、B、C)
A. Guess the Maximum
因为
int n;
int a[N];
void solve() {
cin >> n;
int min_v = 1e9 + 1;
for (int i = 1; i <= n; i ++) {
cin >> a[i];
}
for (int i = 1; i <= n - 1; i ++) {
min_v = min(min_v, max(a[i], a[i + 1]));
}
cout << min_v - 1 << '\n';
}
B. XOR Sequences
观察结论,发现样例
以样例
5432 10 5432 10
57: 1110 01 37: 1001 01
0100 00 0011 00
0100 01 0011 01
0100 10 0011 10
0100 11 0011 11
发现
再看
int x, y;
void solve() {
cin >> x >> y;
int i;
for (i = 0; i <= 30; i ++) {
if ((x >> i & 1) != (y >> i & 1)) {
cout << (1 << i) << '\n';
return;
}
}
cout << (1 << i) << '\n';
}
C. Earning on Bets
吐槽:忘了删刚开始猜的判断
更新:刚开始猜的是对的,在判断
flag > 1 && fabs(flag - 1) < 1e-6
设
因为
那么我们可以二分查找这个
int n;
int k[55];
int a[55];
bool check(int x) {
int sum = x ;
for (int i = 1; i <= n; i ++) {
sum -= x / k[i];
}
return sum >= n;
}
void solve() {
cin >> n;
for (int i = 1; i <= n; i ++) {
cin >> k[i];
}
// double flag = 0;
// for (int i = 1; i <= n; i ++) {
// flag += (double)1 / (double)k[i];
// }
// if (flag > 1 || fabs(flag - 1) < 1e-6) {
// cout << -1 << '\n';
// return;
// }
int l = n - 1, r = n * (int)1e9 + 1;
while (l < r) {
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
int s = l;
if (s == n - 1 || s == n * (int)1e9 + 1) {
cout << -1 << '\n';
return;
}
// cout << l << '\n';
int sum = 0;
for (int i = 1; i <= n; i ++) {
a[i] = s / k[i] + 1;
sum += a[i];
}
int cnt = l - sum;
a[1] += cnt;
for (int i = 1; i <= n; i ++) {
cout << a[i] << ' ';
}
cout << '\n';
// sum = 0;
// for (int i = 1; i <= n; i ++) {
// sum += a[i];
// }
// for (int i = 1; i <= n; i ++) {
// cout << a[i] * k[i] - sum << ' ';
// }
// cout << '\n';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下