POJ3258 River Hopscotch

mac2022-06-30  119

题目大意:

给出河的宽度,也就是开始的石头和结束石头之间的距离,再给出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; }

转载于:https://www.cnblogs.com/lin375691011/p/3996711.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)