poj 3258 River Hopscotch 二分搜索极值
2016-01-06 12:53
435 查看
//poj 3258 //sep9 #include <iostream> #include <algorithm> using namespace std; int L,N,M; int a[50012],b[50012]; bool judge(int mid) { int i=0,sum=0; while(i<=N){ if(b[i]>=mid){ ++i; continue; } int tmp=b[i]; while(tmp<mid){ ++i; if(i>N) return false; ++sum; if(sum>M) return false; tmp+=b[i]; } ++i; } return true; } int main() { scanf("%d%d%d",&L,&N,&M); for(int i=0;i<N;++i) scanf("%d",&a[i]); sort(a,a+N); a =L; for(int i=1;i<=N;++i) b[i]=a[i]-a[i-1]; b[0]=a[0]; int l=0,r=L+1,ans; while(l<r){ int mid=(l+r)/2; if(judge(mid)){ ans=mid; l=mid+1; }else r=mid; } printf("%d\n",ans); return 0; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析