제출 #647468

#제출 시각아이디문제언어결과실행 시간메모리
647468PoonYaPatWatching (JOI13_watching)C++14
100 / 100
131 ms16076 KiB
#include <bits/stdc++.h>
using namespace std;

int n,sm,bg,a[2001];
int dp[2001][2001];

bool check(int w) {

    for (int i=0; i<n; ++i) {
        int preb=(int)(upper_bound(a,a+n,a[i]-2*w)-a)-1;
        int pres=(int)(upper_bound(a,a+n,a[i]-w)-a)-1;

        if (pres!=-1) dp[i][0]=dp[pres][0]+1;
        else dp[i][0]=1;

        for (int j=1; j<=bg; ++j) {
            if (preb==-1) dp[i][j]=0;
            else dp[i][j]=min(dp[preb][j-1],dp[pres][j]+1);
        }
    }

    if (dp[n-1][bg]<=sm) return true;
    else return false;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n>>sm>>bg;
    for (int i=0; i<n; ++i) cin>>a[i];
    sort(a,a+n);

    if (sm+bg>=n) {
        cout<<1;
        return 0;
    }

    int l=1,r=1e9,ans=1e9;
    while (l<=r) {
        int mid=(l+r)/2;
        if (check(mid)) ans=mid,r=mid-1;
        else l=mid+1;
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...