제출 #1209758

#제출 시각아이디문제언어결과실행 시간메모리
1209758Warinchai구경하기 (JOI13_watching)C++20
100 / 100
400 ms31900 KiB
#include<bits/stdc++.h> #define int long long using namespace std; int n,p,q; int dp[2005][2005]; int curs[2005]; int curb[2005]; int inf=1e9; vector<int>v; bool check(int x){ //cerr<<x<<"\n"; for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dp[i][j]=inf; for(int i=0;i<=p;i++)curs[i]=curb[i]=0; for(int i=1;i<=n;i++){ for(int j=0;j<=p;j++){ while(curb[j]<n&&v[curb[j]]<=v[i-1]-2*x)curb[j]++; int id=curb[j]; dp[i][j]=dp[id][j]+1; while(curs[j]<n&&v[curs[j]]<=v[i-1]-x)curs[j]++; id=curs[j]; if(j!=0)dp[i][j]=min(dp[i][j],dp[id][j-1]); } } if(dp[n][p]<=q)return true; return false; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); cin>>n>>p>>q; for(int i=1;i<=n;i++){ int x;cin>>x; v.push_back(x); } sort(v.begin(),v.end()); if(p+q>=n){ cout<<1; return 0; } long long st=1,en=1e9; int ans=0; while(st<=en){ long long m=(st+en)/2; if(check(m)){ ans=m; en=m-1; }else{ st=m+1; } } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...