社区讨论
新手求调
P2678[NOIP 2015 提高组] 跳石头参与者 3已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mi4hhany
- 此快照首次捕获于
- 2025/11/18 19:21 3 个月前
- 此快照最后确认于
- 2025/11/20 04:07 3 个月前
各位大佬,我的代码如下:
CPP#include<bits/stdc++.h>
using namespace std;
int n, d, m, a[50010];
bool check(int k) {
int cnt = 0, pos = 0;
for (int i = 1; i <= n + 1; i++) {
if (a[i] - pos < k) {
if (i == n + 1) return false; // 终点不能移除
cnt++;
} else {
pos = a[i];
}
}
return cnt <= m;
}
int main() {
cin >> d >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
a[n + 1] = d;
int l = 1, r = d, mid, ans = 0;
while (l <= r) {
mid = (l + r) / 2;
if (check(mid)) {
l = mid + 1;
ans = mid;
} else {
r = mid - 1;
}
}
cout << ans;
return 0;
}
其中加了注释的部分是我认为如果把最后的终点考虑进去的话,在终点判断a[i]-pos<k成立时,终点是没办法移除的,不应该再对计算移除节点数量cnt加一,但是这样提交上去的话有一个数据点WA了,把这一句删掉就能AC,想了半天实在想不通为什么,难道不应该对终点的位置做特判吗?
回复
共 11 条回复,欢迎继续交流。
正在加载回复...