POJ 3258 River Hopscotch
题目大意:
给出河的宽度,也就是开始的石头和结束石头之间的距离,再给出n个石头到开始石头的距离,求当移除n个石头中的m块时。两块石头之间的最短距离。
解题思路:
对最短距离进行二分查找。
下面是代码:
#include <stdio.h> #include <algorithm> using namespace std; int l,n,m,a[50005],L; int main() { int i,j,low=0,high,mid,cnt,sum; scanf("%d%d%d",&l,&n,&m); for(i=1;i<n+1;i++) { scanf("%d",&a[i]); } a[0]=0; a[n+1]=l; high=l; sort(a,a+n+2); while(low<=high) { mid=(low+high)>>1; cnt=0; sum=0; for(i=0;i<n+1;i++) { if(sum+a[i+1]-a[i]<=mid) { sum+=a[i+1]-a[i]; cnt++; } else { sum=0; } } if(cnt<=m) { low=mid+1; } else { high=mid-1; } } printf("%d\n",low); return 0; }