Submission #12954

#TimeUsernameProblemLanguageResultExecution timeMemory
12954gs13068Watching (JOI13_watching)C++98
100 / 100
52 ms16780 KiB
#include<cstdio> #include<algorithm> long long c[2002]; int x[2002]; int y[2002]; int d[2002][2002]; int main() { int l,r,mid; int i,j,k,n,a,b; scanf("%d%d%d",&n,&a,&b); if(a+b>=n) { puts("1"); return 0; } for(i=1;i<=n;i++)scanf("%lld",&c[i]); std::sort(c+1,c+n+1); l=1; r=(1e9+a+b+b-1)/(a+b+b); for(i=0;i<=n&&i<=a;i++)for(j=0;i+j<=n&&j<=b;j++)d[i][j]=1; while(l<r) { mid=(l+r)/2; for(i=1;i<=n;i++) { x[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid)-c; y[i]=std::lower_bound(c+i+1,c+n+1,c[i]+mid+mid)-c; } x[n+1]=y[n+1]=n+1; for(i=0;i<=n&&i<=a;i++) { for(j=0;i+j<=n&&j<=b;j++) { if(d[i][j]>n)break; d[i+1][j]=std::max(d[i+1][j],x[d[i][j]]); d[i][j+1]=std::max(d[i][j+1],y[d[i][j]]); d[i][j]=1; } if(i+j<=n&&j<=b)break; } if(i<=n&&i<=a)r=mid; else l=mid+1; for(k=j;i+k<=n&&k<=b;k++)d[i][k]=1; i++; for(k=0;i+k<=n&&k<=j;k++)d[i][k]=1; } printf("%d",l); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...