直接贴代码
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<algorithm> #include<vector> #include<queue> #include<set> using namespace std; int stone[500005],dis[500005]; int l,n,m; bool judge(int p) { if(p*m<l) return false; int cnt=0,i=1; while(cnt<=m){ int temp=p; for(;i<=n+1;){ if(temp>=dis[i]){ temp-=dis[i]; i++; } else { break; } } cnt++; if(i>n+1) break; } if(cnt>m) return false; else return true; } int solve(int l,int r){ int mid; while(l<r){ mid=(l+r)>>1; if(judge(mid)) r=mid; else l=mid+1; } return l; } int main() { while(scanf("%d%d%d",&l,&n,&m)!=EOF){ int i; memset(stone,0,sizeof(stone)); for(i=1;i<=n;i++){ scanf("%d",&stone[i]); } stone[0]=0; stone[i]=l; sort(stone+1,stone+1+n); for(i=1;i<=n+1;i++) dis[i]=stone[i]-stone[i-1]; printf("%d\n",solve(1,l)); } }
hdu4004 The Frog's Games 二分,布布扣,bubuko.com
原文:http://blog.csdn.net/cnh294141800/article/details/22606091