您的位置:首页 > 运维架构

poj 3258 River Hopscotch 二分搜索极值

2016-01-06 12:53 435 查看
//poj 3258
//sep9
#include <iostream>
#include <algorithm>
using namespace std;
int L,N,M;
int a[50012],b[50012];

bool judge(int mid)
{
int i=0,sum=0;
while(i<=N){
if(b[i]>=mid){
++i;
continue;
}
int tmp=b[i];
while(tmp<mid){
++i;
if(i>N)
return false;
++sum;
if(sum>M)
return false;
tmp+=b[i];
}
++i;
}
return true;
}

int main()
{
scanf("%d%d%d",&L,&N,&M);
for(int i=0;i<N;++i)
scanf("%d",&a[i]);
sort(a,a+N);
a
=L;
for(int i=1;i<=N;++i)
b[i]=a[i]-a[i-1];
b[0]=a[0];
int l=0,r=L+1,ans;
while(l<r){
int mid=(l+r)/2;
if(judge(mid)){
ans=mid;
l=mid+1;
}else
r=mid;
}
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 算法