제출 #312907

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

template<typename T>
void out(T x) { cout << x << endl; exit(0); }
#define watch(x) cout << (#x) << " is " << (x) << endl





using ll = long long;

const int inf = 1e9;
const int maxn = 1e5 + 5;


int n,p,q;
int a[maxn];


int dp[2001][2001]; //dp[i][j]: min big cameras for first i events, given we use j small cameras

bool test(int len) {
    int l=1;
    int r=1;
    for (int i=1; i<=n; i++) {
	while (a[l] < a[i]-len+1) l++;
	while (a[r] < a[i]-2*len+1) r++;
	
	for (int j=0; j<=p; j++) {
	    dp[i][j] = inf;
	    if (j>0) {
		dp[i][j] = min(dp[i][j], dp[l-1][j-1]);
	    }
	    dp[i][j] = min(dp[i][j], dp[r-1][j] + 1);
	}
    }

    return dp[n][p] <= q;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);  cout.tie(0);

    cin>>n>>p>>q;
    for (int i=1; i<=n; i++) {
	cin>>a[i];
    }
    sort(a+1,a+1+n);

    if (p+q>=n) out(1);

    int lo=0;
    int hi=1e9;

    while (hi-lo>1) {
	int mid=(lo+hi)/2;
	if (test(mid)) {
	    hi=mid;
	} else {
	    lo=mid;
	}
    }

    cout<<hi<<endl;
    
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...