P2678 [NOIP2015 提高组] 跳石头
题目链接
题目思路
记着存起点和终点。。
二分 mid 为两点之差
当前点和上一点的距离 >= mid时,更新上一点为当前点,当 < mid时cnt++相当于移除这块石头
当移除石头 <= m 时 l 更新 mid 增大,> m时 r 更新 mid 减小
题目代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 50010;
int s[N];
int n, m, len;
bool check(int x)
{
int res = 0, cnt = 0;
for(int i = 1; i <= n; i ++ )
{
if(s[i] - res < x) cnt ++ ;
else res = s[i];
}
return cnt <= m;
}
int main()
{
cin >> len >> n >> m;
for(int i = 1; i <= n; i ++ )
cin >> s[i];
s[++ n] = len;
int l = 1, r = 1e9;
while(l < r)
{
int mid = l + r + 1 >> 1;
if(check(mid)) l = mid;
else r = mid - 1;
}
cout << r << endl;
return 0;
}
孤独本是常态