이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |