Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 5676 Accepted Submission(s): 2732
#include<stdio.h> #include<queue> #include<string.h> #include<algorithm> #include<iostream> #include<queue> #include<set> #include<vector> using namespace std; const int MAXN = 500010; int L, n, m; int ston[MAXN]; bool js(int x){ int cnt = 0, last = ston[0]; for(int i = 1; i <= n; i++){ if(ston[i] - ston[i - 1] > x) return false; if(ston[i] - last > x){ cnt++; last = ston[i - 1]; if(cnt >= m) return false; } } return true; } int erfen(int l, int r){ int mid, ans; while(l <= r){ mid = (l + r) >> 1; if(js(mid)){ ans = mid; r = mid - 1; } else l = mid + 1; } return ans; } int main(){ while(~scanf("%d%d%d", &L, &n, &m)){ for(int i = 1; i <= n; i++) scanf("%d", ston + i); ston[0] = 0; ston[n + 1] = L; n++; sort(ston, ston + n + 1); printf("%d\n", erfen(0, L)); } return 0; }
原文:http://www.cnblogs.com/handsomecui/p/5523042.html