Submission #1305456

#TimeUsernameProblemLanguageResultExecution timeMemory
1305456mikasa구경하기 (JOI13_watching)C++20
100 / 100
519 ms30388 KiB
#include<bits/stdc++.h> using namespace std; using intt=int32_t; #define debug(n,m) cout<<"["<<#n<<"]->"<<n<<m #define int long long #define all(x) x.begin(),x.end() #define pb push_back const int N=10001; const int mod=1e9; const int inf=2e9; int n,p,q; int a[N]; bool check(int x){ vector<vector<int>> dp(n+1,vector<int>(p+1,inf)); vector<int> sm(n+1,0); vector<int> la(n+1,0); for (int i=0;i<n;++i) { sm[i]=upper_bound(a+1,a+n+1,a[i+1]+x-1)-a-1; la[i]=upper_bound(a+1,a+n+1,a[i+1]+2*x-1)-a-1; } dp[0][0]=0; for (int i=0;i<n;++i) { for (int j=0;j<=p;++j) { if(j<p)dp[sm[i]][j+1]=min(dp[sm[i]][j+1],dp[i][j]); dp[la[i]][j]=min(dp[la[i]][j],dp[i][j]+1); } } int fl=0; for (int j=0;j<=p;++j) if (dp[n][j]<=q) fl=1; return fl; } void levi() { cin>>n>>p>>q; a[0]=1; for (int i=1;i<=n;++i) cin>>a[i]; sort(a+1,a+n+1); if (p+q>=n) { cout<<1<<'\n'; return; } int lo=1,hi=1e9; int res=1e9; while(lo<=hi) { int mid=lo+(hi-lo)/2; if (check(mid)) { res=mid; hi=mid-1; } else lo=mid+1; } cout<<res<<'\n'; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0);int tt=1;//cin>>tt; while(tt--)levi(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...