# include <bits/stdc++.h>
# define ll long long
using namespace std;
int N, P, Q;
vector<int> arr;
int mn[2001][2001];
int edge[2][2001];
bool cek(int a) {
// set edge nya dulu
for(int i=0;i<N;i++) {
int T = arr[i] + a - 1;
edge[0][i] = upper_bound(arr.begin(), arr.end(), T) - arr.begin();
T += a;
edge[1][i] = upper_bound(arr.begin(), arr.end(), T) - arr.begin();
// if(a == 4) cout<<i<<" "<<edge[0][i]<<" "<<edge[1][i]<<endl;
}
priority_queue< pair<int, pair<int, int> > > PQ;
PQ.push(make_pair(0, make_pair(0, 0)));
vector< pair<int, int> > ST;
ST.clear();
while(!PQ.empty()) {
int x, y, z;
x = PQ.top().second.first;
y = PQ.top().second.second;
z = PQ.top().first;
PQ.pop();
if(-z > Q) continue;
if(mn[x][-y] != 1e9) continue;
// if(a == 1) cout<<x<<" "<<y<<" "<<z<<endl;
ST.push_back(make_pair(x, -y));
mn[x][-y] = z;
if(x == N) {
for(auto p : ST) mn[p.first][p.second] = 1e9;
return 1;
}
PQ.push(make_pair(z, make_pair(edge[0][x], y-1)));
PQ.push(make_pair(z-1, make_pair(edge[1][x], y)));
}
for(auto p : ST) mn[p.first][p.second] = 1e9;
return 0;
}
int main() {
scanf("%d %d %d", &N, &P, &Q);
arr.resize(N);
for(int i=0;i<N;i++) scanf("%d", &arr[i]);
sort(arr.begin(), arr.end());
if(P + Q >= N) {
printf("1\n");
return 0;
}
for(int i=0;i<=N;i++) {
for(int k=0;k<=P;k++) mn[i][k] = 1e9;
}
// cout<<cek(4)<<endl;
int l = 1, r = 1e9, ans = -1;
while(l <= r) {
int mid = (l + r) / 2;
if(cek(mid)) {
ans = mid;
r = mid - 1;
} else l = mid + 1;
}
printf("%d\n", ans);
}
Compilation message
watching.cpp: In function 'int main()':
watching.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
52 | scanf("%d %d %d", &N, &P, &Q);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
watching.cpp:54:28: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
54 | for(int i=0;i<N;i++) scanf("%d", &arr[i]);
| ~~~~~^~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
724 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
340 KB |
Output is correct |
4 |
Correct |
1 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
0 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
596 KB |
Output is correct |
8 |
Correct |
1 ms |
724 KB |
Output is correct |
9 |
Correct |
1 ms |
724 KB |
Output is correct |
10 |
Correct |
3 ms |
724 KB |
Output is correct |
11 |
Correct |
5 ms |
688 KB |
Output is correct |
12 |
Correct |
6 ms |
724 KB |
Output is correct |
13 |
Correct |
1 ms |
724 KB |
Output is correct |
14 |
Correct |
1 ms |
724 KB |
Output is correct |
15 |
Correct |
1 ms |
724 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
5 ms |
8276 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
320 KB |
Output is correct |
4 |
Correct |
1 ms |
316 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
9 ms |
8404 KB |
Output is correct |
8 |
Correct |
366 ms |
11364 KB |
Output is correct |
9 |
Correct |
624 ms |
17644 KB |
Output is correct |
10 |
Correct |
197 ms |
19472 KB |
Output is correct |
11 |
Correct |
441 ms |
12420 KB |
Output is correct |
12 |
Execution timed out |
1084 ms |
31188 KB |
Time limit exceeded |
13 |
Halted |
0 ms |
0 KB |
- |