제출 #1327962

#제출 시각아이디문제언어결과실행 시간메모리
1327962hashimzaderashid구경하기 (JOI13_watching)C++20
100 / 100
436 ms31928 KiB
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
    ll t,a,b,c,d,e,f,g;
    cin>>a>>b>>c;
    vector<ll>vk(a);
    for(int i = 0;i<a;i++){
        cin>>vk[i];
    }
    sort(vk.begin(),vk.end());
    b = min(a,b);
    ll l = 1;
    ll r = 1e9;
    ll ans = 1e9;
    while(l<=r){
        ll mid = (l+r)/2;
        vector<ll>nxt1(a);
        vector<ll>nxt2(a);
        for(int i = 0;i<a;i++){
            nxt1[i] = lower_bound(vk.begin(),vk.end(),vk[i]+mid)-vk.begin();
            nxt2[i] = lower_bound(vk.begin(),vk.end(),vk[i]+2*mid)-vk.begin();
        }
        vector<vector<ll>>dp(a+1,vector<ll>(b+1,1e18));
        dp[0][0] = 0;
        for(int i = 0;i<a;i++){
            for(int j = 0;j<=b;j++){
                if(dp[i][j] > c){
                    continue;
                }
                if(j+1 <= b){
                    if(dp[nxt1[i]][j+1] > dp[i][j]){
                        dp[nxt1[i]][j+1] = dp[i][j];
                    }
                }
                if(dp[nxt2[i]][j] > dp[i][j]+1){
                    dp[nxt2[i]][j] = dp[i][j]+1;
                }
            }
        }
        ll ok = 0;
        for(int i = 0;i<=b;i++){
            if(dp[a][i] <= c){
                ok = 1;
                break;
            }
        }
        if(ok){
            ans = mid;
            r = mid-1;
        }
        else{
            l = mid+1;
        }
    }
    cout<<ans<<endl;
}
//By Rashid_Hashimzade
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...