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

bzoj1650: [Usaco2006 Dec]River Hopscotch 跳石子

2015-09-29 19:36 501 查看
当看到最小值最大或者最大值最小的时候,还是要先考虑二分啊。

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long ll;
ll l,n,k;
ll a[55000],s[55000];
ll cmp(int x,int y)
{
return x<y;
}
bool check(ll x)
{
ll cnt=0;
for(ll i=1;i<=n+1;i++)
{
if(s[i]-s[i-1]<x)
{
cnt++;
s[i]=s[i-1];
}
if(cnt>k)return 0;
}
return 1;
}
int main()
{
scanf("%lld %lld %lld",&l,&n,&k);
for(ll i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
sort(a+1,a+1+n,cmp);
a[0]=0;
a[n+1]=l;
ll l=0,r=1000000000;
while(l<=r)
{
for(ll i=0;i<=n+1;i++)
{
s[i]=a[i];
}
ll mid=(l+r)>>1;
if(check(mid))
{
l=mid+1;
}else
{
r=mid-1;
}
}
printf("%lld",r);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息