链接 3258 -- River Hopscotch (poj.org)
这道题和之前那道(poj 3579Median)一样,不知道是二分
但是这道题知道是二分可能会好像一丢丢/我没能独自AC
题解思路
遍历到第 i 个房子和之前记录的一个房子看看是否大于mid,小于的话是可以吧石头去掉,以为这个mid是我们认为去掉石头后最小的间距,比他还小的自然是被去掉的,最后看看这个 假定的最小值去掉的石头是否满足题意
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e6+5;
int U[N];
int m,n,len,l,r,mid;
int check()
{
int num=0,pos=0;
for(int i=1;i<=m;i++)
{
if(U[i]-U[pos]<=mid)
num++;
else pos=i;
}
if(num>n) return 1;
else return 0;
}
int main()
{
cin>>len>>m>>n;
for(int i=1;i<=m;i++)
cin>>U[i];
sort(U+1,U+1+m);
l=0,r=len;
while(l<r)
{
mid=(l+r)/2;
if(check()) r=mid;
else l=mid+1;
}
cout<<r;
return 0;
}