Submission #83689

#TimeUsernameProblemLanguageResultExecution timeMemory
83689Bodo171Watching (JOI13_watching)C++14
100 / 100
211 ms16336 KiB
#include <iostream> #include <fstream> #include <algorithm> using namespace std; const int nmax=2005; int dp[nmax][nmax]; int v[nmax]; int n,p,q,i,j,p1,p2,val; bool check(int val) { for(i=1;i<=n;i++) for(j=0;j<=p;j++) dp[i][j]=q+1; p1=p2=1; for(i=1;i<=n;i++) { while(v[i]-v[p1]+1>val) p1++; while(v[i]-v[p2]+1>2*val) p2++; for(j=1;j<=p;j++) dp[i][j]=min(dp[p1-1][j-1],dp[p2-1][j]+1); dp[i][0]=dp[p2-1][0]+1; } for(i=0;i<=p;i++) if(dp[n][i]<=q) return 1; return 0; } int main() { //freopen("data.in","r",stdin); ios_base::sync_with_stdio(false); cin>>n>>p>>q; for(i=1;i<=n;i++) cin>>v[i]; sort(v+1,v+n+1); if(p+q>=n) { cout<<"1"; return 0; } val=(1<<29)-1; for(int p=28;p>=0;p--) if(check(val-(1<<p))) val-=(1<<p); cout<<val; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...