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

River Hopscotch POJ - 3258 (二分求最小值)

2017-04-21 10:07 253 查看
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>

using namespace std;
const int maxn = 50005;
int a[maxn];
int n,L,m;
int ok(int mid)
{
int dis=0,num=0;
for(int i=0;i<n;i++)
{
if(a[i]-dis<mid) {num++;}
else dis=a[i];
}
if(L-dis<mid) num++;
if(num<=m) return 1;//因为要求最大值,如果=放在下面的话,范围就变小了
else return 0;
}
int main()
{
scanf("%d %d %d",&L,&n,&m);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
int l=0,r=L,res=0;
while(l<=r)
{
int mid=l+(r-l)/2;
if(!ok(mid)) {r=mid-1;}
else {res=mid;l=mid+1;}
}
printf("%d\n",res);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: