HDU 4004
阿新 • • 發佈:2019-01-02
簡單的二分
有 n 個石頭,求最短長度的話,二分一下最短長度判斷完成。。。
以下是 AC 程式碼
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define ll long long int const int maxn = 1e6+5; ll num[maxn]; int t,m,n; bool judge(int x) { int res = 0, temp = 0; for(int i=1;i<=n;i++) { if(num[i] - temp > x) return false; while(num[i] - temp <= x && i <= n) i++; temp = num[--i]; res ++; } return res<=m; } int main() { while(~scanf("%d%d%d",&t,&n,&m)) { for(int i=1;i<=n;i++) scanf("%lld",&num[i]); num[++n] = t; sort(num+1,num+1+n); int l = 0; int r = t; int mid, ans; while(r - l >= 0) { mid = (r+l) / 2; if(judge(mid)) r = mid - 1, ans = mid; else l = mid + 1; } printf("%d\n",ans); } return 0; }