社区讨论
90分二分 蒟蒻求助
P2678[NOIP 2015 提高组] 跳石头参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lo30co1d
- 此快照首次捕获于
- 2023/10/23 22:43 2 年前
- 此快照最后确认于
- 2023/10/23 22:43 2 年前
这里二分最短跳跃距离
计算此时所需要移除的岩石
如果大于题干所给的可以岩石数就不行 然后return false
CPP
#include <iostream>
using namespace std;
const int N = (int)5e4;
int total_run;
int total_rocks;
int demand;
int dist[N];
int ans;
bool check(int x)
{
int last = 0, cnt = 0;
for (int i = 1; i <= total_rocks + 1; i++)
{
if (dist[i] - dist[last] >= x)
last = i;
else
cnt++;
}
return cnt <= demand;
}
int main()
{
cin >> total_run >> total_rocks >> demand;
dist[0] = 0;
dist[total_rocks + 1] = total_run;
for (int i = 1; i <= total_rocks; i++)
{
cin >> dist[i];
}
int left = 1;
int right = total_run;
while (left <= right)
{
int mid = (left + right) / 2;
if (check(mid))
{
ans = mid;
left = mid + 1;
}
else
{
right = mid - 1;
}
}
cout << ans << endl;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...