Submission #1279002

#TimeUsernameProblemLanguageResultExecution timeMemory
1279002IBory구경하기 (JOI13_watching)C++20
100 / 100
211 ms16176 KiB
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;

const int MAX = 2004;
int A[MAX], dp[MAX][MAX], pv[2][MAX];

int main() {
	ios::sync_with_stdio(0); cin.tie(0);
	int N, P, Q;
	cin >> N >> P >> Q;
	P = min(P, N); Q = min(Q, N);
	for (int i = 1; i <= N; ++i) cin >> A[i];
	sort(A + 1, A + N + 1);

	ll l = 0, r = (ll)1e9 + 1;
	while (l + 1 < r) {
		ll mid = (l + r) >> 1;
		for (int i = 1; i <= N; ++i) {
			pv[0][i] = (upper_bound(A + 1, A + N + 1, A[i] - mid) - A) - 1;
			pv[1][i] = (upper_bound(A + 1, A + N + 1, A[i] - 2LL * mid) - A) - 1;
		}

		memset(dp, 0x3f, sizeof(dp));
		for (int q = 0; q <= Q; ++q) {
			dp[q][0] = 0;
			for (int i = 1; i <= N; ++i) {
				if (q) dp[q][i] = dp[q - 1][pv[1][i]];
				dp[q][i] = min(dp[q][i], dp[q][pv[0][i]] + 1);
			}
		}
		(dp[Q][N] <= P ? r : l) = mid;
	}

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