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...