Submission #1207502

#TimeUsernameProblemLanguageResultExecution timeMemory
1207502edga1구경하기 (JOI13_watching)C++20
50 / 100
5 ms3144 KiB
#include <bits/stdc++.h> using namespace std; int a[2005]; int n,p,q; int dp[105][105][105]; int check(int w, int l, int s, int b){ if(l==0) return 1; if(dp[l][s][b]!=0) return dp[l][s][b]; dp[l][s][b]=-1; if(s>0){ int nl=l-1; while(nl>0){ if(a[l-1]-a[nl-1]<w) nl--; else break; } dp[l][s][b]=max(dp[l][s][b],check(w,nl,s-1,b)); } if(b>0){ int nl=l-1; while(nl>0){ if(a[l-1]-a[nl-1]<2*w) nl--; else break; } dp[l][s][b]=max(dp[l][s][b],check(w,nl,s,b-1)); } return dp[l][s][b]; } int bs(){ int l=1,r=1e9,mid; while(l<=r){ mid=(l+r)/2; int g=check(mid,n,p,q); if(g==1) r=mid-1; else l=mid+1; for(int i=0; i<=n; i++){ for(int j=0; j<=p; j++){ for(int z=0; z<=q; z++){ dp[i][j][z]=0; } } } } return l; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>p>>q; for(int i=0; i<n; i++) cin>>a[i]; sort(a,a+n); if(p+q>=n){ cout<<1; return 0; } cout<<bs(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...