一道很水的二分题...太久没做二分了今天水一道,还wa了几发...这道我感觉之前遇到好几次了,都没写出来...回头看这题好简单...
题目链接:River Hopscotch - POJ 3258 - Virtual Judge (vjudge.net)
主要还是二分太久不写了,判断边界的时候会出一点问题...
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<queue>
#include<algorithm>
typedef long long ll;
using namespace std;
ll d[50005];
ll n,l,m;
int check(ll x){
ll sum=0,f=0;
for(int i=1;i<=n+1;i++){
if(d[i]-d[i-1-f]>=x) f=0;
else {
sum++;f++;
}
}
if(sum>m) return 0;
else return 1;
}
int main(){
cin>>l>>n>>m;
for(int i=1;i<=n;i++){
cin>>d[i];
}
d[0]=0;d[n+1]=l;
sort(d,d+n+1);
ll le=0,ri=l;
while(le<=ri){
ll mid=(le+ri)/2;
if(check(mid)==1) le=mid+1;
else ri=mid-1;
}
cout<<ri;
}