社区讨论
基础赛 T4 悬关求调
学术版参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @mlj9gva0
- 此快照首次捕获于
- 2026/02/12 17:33 7 天前
- 此快照最后确认于
- 2026/02/14 23:55 5 天前
50pts
CPP#include <bits/stdc++.h>
using namespace std;
#define int long long
int b[1000005], c[1000005];
bool ff[1000005];
signed main() {
int n, a, d; cin >> n >> a >> d;
for(int i = 1;i < n;i++)
cin >> b[i], b[i] = (b[i] - 2) / (2 * d), c[i] = b[i];
// for(int i = 1;i < n;i++) cout << b[i] << " \n"[i == n-1];
for(int i = 1;i < n;i++) if(!b[i]) ff[i] = 1;
int ans3 = 0;
for(int i = a;i < n;) {
int can = b[i];
ans3 += can;
if(i < (n-1) && b[i+1] >= 1) i++;
else if(i < (n-2) && b[i+2] >= 1) i++, i++;
else break;
} int ans4 = 0; for(int i = a;i >= 1;) {
int can = b[i];
ans4 += can;
if(i >= 2 && b[i-1] >= 1) i--;
else if(i >= 3 && b[i-2] >= 1) i--, i--;
else break;
}
int p = a, lst = a, ans = 0;
for(;p < n;) {
ans += max(b[p] - 1, 0ll); b[p] = min(b[p], 1ll);
if(p < (n-1) && b[p+1] > 1) lst++, p++;
else if(p < (n-2) && b[p+2] > 1) lst += 2, p += 2;
else {
if(ff[p]) {
if(p < (n-1) && b[p+1] == 1) {
if(b[p-1] > 0) ans++;
} break;
}
if(p < (n-1) && b[p+1] == 1) {
b[p+1] = 0; ans++;
if(p < (n-2) && b[p+2] == 1) {
p++; continue;
} else break;
} else if(p < (n-2) && b[p+2] == 1 && lst == p) {
b[p+2] = 0; ans++; break;
} else break;
}
} for(;p >= 1;) {
ans += b[p]; b[p] = 0;
if(p >= 2 && b[p-1] > 0) p--;
else if(p >= 3 && b[p-2] > 0) p -= 2;
else break;
} int ans2 = 0;
p = a, lst = a, ans2 = 0;
for(;p >= 1;) {
ans2 += max(c[p] - 1, 0ll); c[p] = min(c[p], 1ll);
if(p >= 2 && c[p-1] > 1) lst--, p--;
else if(p >= 3 && c[p-2] > 1) lst -= 2, p -= 2;
else {
if(ff[p]) {
if(p >= 2 && b[p-1] == 1) {
if(b[p+1] > 0) ans2++;
} break;
}
if(p >= 2 && c[p-1] == 1) {
c[p-1] = 0; ans2++;
if(p > 2 && c[p-2] > 0) { p--; continue; }
else break;
} else if(p >= 3 && c[p-2] == 1 && lst == p) {
c[p-2] = 0; ans2++; break;
} else break;
}
} // cout << ans2 << " " << p << endl;
// for(int i = 1;i < n;i++) cout << c[i] << " \n"[i == n-1];
for(;p < n;) {
ans2 += c[p]; c[p] = 0;
if(p < (n-1) && c[p+1] > 0) p++;
else if(p < (n-2) && c[p+2] > 0) p += 2;
else break;
} cout << max({ans, ans2, ans3, ans4}) << endl;
return 0;
}
知道 hack 但是不知道怎么改
我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote 我要 downvote
回复
共 4 条回复,欢迎继续交流。
正在加载回复...