hdu4004 二分搜索

来源:互联网 发布:unity3d 2d游戏教程 编辑:程序博客网 时间:2024/05/17 23:54

#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<algorithm>using namespace std;int l, n, m, a[500005];bool calc(int x){int step = 0, cur = 0;for(int i = 0; i <= n; ){if( ++step>m || a[i]-cur>x )return false;while( i <= n && a[i]-cur <= x )i++;cur = a[i-1];}return true;}int main(){while( scanf("%d%d%d", &l, &n, &m)!=EOF ){for(int i = 0; i<n; i++){scanf("%d", a+i);}a[n] = l;sort(a, a+n);int mid, left = 0, r = l;while( r>left ){mid = (left+r) >> 1;if( calc(mid) )r = mid;elseleft = mid+1;}printf("%d\n", r);}return 0;}