Submission #1138

#TimeUsernameProblemLanguageResultExecution timeMemory
1138kriiiWatching (JOI13_watching)C++98
100 / 100
317 ms16836 KiB
#include <stdio.h> #include <algorithm> using namespace std; int N,P,Q,A[2020]; int D[2020][2020]; bool chk(int w) { if (w <= 0) return false; int i,j,k,l; for (i=j=k=1;i<=N;i++){ while (A[i] - A[j] >= w) j++; while (A[i] - A[k] >= w * 2) k++; D[i][0] = D[j-1][0] + 1; for (l=1;l<=Q;l++) D[i][l] = min(D[j-1][l] + 1, D[k-1][l-1]); } for (l=0;l<=Q;l++) if (D[N][l] <= P) return true; return false; } int main() { int i; scanf ("%d %d %d",&N,&P,&Q); for (i=1;i<=N;i++) scanf ("%d",&A[i]); sort(A+1,A+1+N); if (N <= P + Q) printf ("1"); else{ int l = 1, r = 1000000000, m; while (l < r){ m = (l + r) / 2; if (chk(m)) r = m - 1; else l = m + 1; } while (chk(m)) m--; while (!chk(m)) m++; printf ("%d",m); } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...