Submission #1251722

#TimeUsernameProblemLanguageResultExecution timeMemory
1251722hihihihawWatching (JOI13_watching)C++20
100 / 100
415 ms31780 KiB
#pragma GCC optimize("O3,unroll-loops") #include <bits/stdc++.h> using namespace std; #define int long long #define pb push_back #define pii pair<int,int> #define sz(v) (int)v.size() #define fi first #define se second #define INF 1223372036854775807 int32_t main(){ //freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); int n,p,q; cin>>n>>p>>q; int a[n]; for (int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); if (p>=n){ cout<<1<<endl; return 0; } int l=1,r=999999999999; while (r>=l){ int w=(r+l)/2; int prv[n]; int prv2[n]; for (int i=0;i<n;i++){ prv[i]=-1; prv2[i]=-1; for (int j=0;j<n;j++){ if (a[j]<=a[i]-w) prv[i]=j; if (a[j]<=a[i]-2*w) prv2[i]=j; } } int dp[n][n+1]={}; dp[0][0]=1; for (int i=1;i<n;i++){ for (int j=0;j<=n;j++){ dp[i][j]=INF; if (j>0){ if (prv[i]!=-1) dp[i][j]=min(dp[i][j],dp[prv[i]][j-1]); else dp[i][j]=0; } if (prv2[i]!=-1) dp[i][j]=min(dp[i][j],dp[prv2[i]][j]+1); else dp[i][j]=min(dp[i][j],1ll); } } if (dp[n-1][p]<=q) r=w-1; else l=w+1; } cout<<l<<endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...