제출 #444636

#제출 시각아이디문제언어결과실행 시간메모리
444636osmanallazovWatching (JOI13_watching)C++14
100 / 100
292 ms15964 KiB
#include <bits/stdc++.h>
using namespace std;
int n,p,q;
int event[2002];
int dp[2001][2001];
bool check(int w){
    int sm=0,lr=0;
    for(int i=1;i<=n;i++){
        while(event[i]-event[sm+1]>=w){
            sm++;
        }
        while(event[i]-event[lr+1]>=2*w){
            lr++;
        }
        for(int j=0;j<=p;j++){
            dp[i][j]=2001;
            if(j){
                dp[i][j]=min(dp[i][j],dp[sm][j-1]);
            }
            dp[i][j]=min(dp[i][j],dp[lr][j]+1);
        }
    }
    return dp[n][p]<=q;
}
int main()
{
    cin>>n>>p>>q;
    if(p>n){
        p=n;
    }
    if(q>n){
        q=n;
    }
    for(int i=0;i<n;i++){
        cin>>event[i];
    }
    sort(event,event+n+1);
    int l=1,r=1e9,ans=1e9;
    while(l<=r){
        int mid=(l+r)/2;
        if(check(mid)){
            r=mid-1;
            ans=mid;
        }
        else{
            l=mid+1;
        }
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...