Submission #51450

#TimeUsernameProblemLanguageResultExecution timeMemory
51450VinhspmWatching (JOI13_watching)C++14
50 / 100
1079 ms8892 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ii pair<int, int>
#define fi first
#define se second
#define pb push_back
const int N = 2009;
const int oo = 1e9;
const int mod = 1e9 + 7;
int n, P, Q;
int a[N], dp[N][N];
bool check(int x)	{
	// base
	for(int i = 0; i <= P; ++ i)
		for(int j = 0; j <= Q; ++j)
			dp[i][j] = -1;
	dp[0][0] = 0;
	for(int i = 0; i <= P; ++i)
		for(int j = 0; j <= Q; ++j){
				if(i > 0)	{
					int cur = dp[i - 1][j] + 1;
					int nexpos = a[cur] + x  - 1;
					int pos = upper_bound(a + 1, a + n + 1, nexpos) - a - 1;
					dp[i][j] = max(dp[i][j], pos);
				}
				if(j > 0)	{
					int cur = dp[i][j - 1] + 1;
					int nexpos = a[cur] + 2*x - 1;
					int pos = upper_bound(a + 1, a + n + 1, nexpos) - a - 1;
					dp[i][j] = max(dp[i][j], pos);
				}
				if(dp[i][j] == n) return true;
			}
	return false;
}
signed main()
{
	//freopen("test.txt", "r", stdin);
	//ios_base::sync_with_stdio(false);
	//cin.tie(0); cout.tie(0);
	scanf("%d%d%d", &n, &P, &Q);
	for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	sort(a + 1, a + n + 1); a[0] = 0;
	if(P + Q >= n) {
		printf("1");
		return 0;
	}
	//cout << check(3) << '\n'; return 0;
	int l = 1, r = oo;
	while(r > l + 1)	{
		int mid = (l + r)/ 2;
		if(check(mid)) r = mid;
		else l = mid;
	}
	for(int i = l; i <= r; ++i)
		if(check(i))	{
			printf("%d", i); 
			return 0;
		}
}

Compilation message (stderr)

watching.cpp: In function 'int main()':
watching.cpp:42:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d%d", &n, &P, &Q);
  ~~~~~^~~~~~~~~~~~~~~~~~~~~~
watching.cpp:43:35: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
                              ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...