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

poj 3258 River Hopscotch

2011-03-19 12:02 218 查看
二分搜索。

删除的rock越多,那个最小间距越大,极限是L

删除的rock越少,那个最小间距越小,极限是初始的最小间距

而对于边界的确定,确实比较麻烦,我是找了几组数据,找到了共同的特性,证明却不会

#include<iostream>
#include<cstdlib>
using namespace std;
#define inf 1000000005
#define N 50005
int a
;
int cmp(const void *b,const void *c)
{
return *(int *)b-*(int *)c;
}
int bin_search(int l,int r,int n,int m)
{
int left=l,right=r,mid,last,cnt,i;
while(left<=right)
{
mid=(left+right)/2;
last=a[0],cnt=0;
for(i=1;i<=n;i++)
{
if(a[i]-last>=mid)
last=a[i];
else
cnt++;
}
if(cnt<=m)
left=mid+1;
else
right=mid-1;
}
return right;
}
int main()
{
int d,n,m,i,l;
while(scanf("%d%d%d",&d,&n,&m)!=EOF)
{
l=inf;
a[0]=0,a[n+1]=d;
for(i=1;i<=n;i++)
{
scanf("%d",a+i);
if(a[i]-a[i-1]<l)
l=a[i]-a[i-1];
}
if(a[n+1]-a
<l)
l=a[n+1]-a
;
qsort(a+1,n,sizeof(a[1]),cmp);
printf("%d/n",bin_search(l,d,n,m));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: