제출 #1253019

#제출 시각아이디문제언어결과실행 시간메모리
1253019elotelo966구경하기 (JOI13_watching)C++20
50 / 100
94 ms31896 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define OYY LLONG_MAX #define faster ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); #define fi first #define se second #define FOR for(int i=1;i<=n;i++) #define mid (start+end)/2 #define pb push_back #define lim 2005 const int mod=998244353; int n,p,q; int a[lim]; int w; int git[lim][2]; int dp[lim][lim]; inline int f(int sira,int cur_p){ if(sira>n){ return 0; } if(~dp[sira][cur_p])return dp[sira][cur_p]; int cev=LLONG_MAX; if(cur_p+1<=p){ cev=min(cev,f(git[sira][0],cur_p+1)); } cev=min(cev,f(git[sira][1],cur_p)+1); return dp[sira][cur_p]=cev; } inline bool check(int ger){ w=ger; FOR{ int ol=i; for(int j=i;j<=n;j++){ if(a[j]-a[i]<w){ ol=j; } else break; } git[i][0]=ol+1; } FOR{ int ol=i; for(int j=i;j<=n;j++){ if(a[j]-a[i]<2*w){ ol=j; } else break; } git[i][1]=ol+1; } memset(dp,-1,sizeof(dp)); int tut=f(1,0); //cout<<w<<" "<<tut<<endl; return tut<=q; } int32_t main(){ faster cin>>n>>p>>q; FOR{ cin>>a[i]; } sort(a+1,a+1+n); p=min(p,200ll); q=min(q,200ll); int l=1,r=1e9; while(l<=r){ int mi=(l+r)/2; if(check(mi)){ r=mi-1; } else l=mi+1; } cout<<l<<'\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...