Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)
Total Submission(s): 5676 Accepted Submission(s): 2732
are out. The frogs was asked to jump at most m (1<= m <= n+1) times. Now the frogs want to know if they want to jump across the river, at least what ability should they have. (That is the frog's longest jump distance).
Then n lines follow. Each stands for the distance from the starting banks to the nth stone, two stone appear in one place is impossible.
#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; }