#include <bits/stdc++.h>
#include "grader.h"
using namespace std;
int n;
int ask(const vector<int> &q) {
int x = query(q);
if (x == n) {
exit(0);
}
return x;
}
mt19937 rng(123123);
void solve(int n) {
::n = n;
vector<int> a(n);
iota(a.begin(), a.end(), 1);
do {
shuffle(a.begin(), a.end(), rng);
} while (ask(a));
int cur = 0;
vector<int> done(n);
for (int i = 0; i < n; i++) {
if (done[i]) continue;
vector<int> ord;
for (int j = i + 1; j < n; j++) {
if (!done[j]) ord.emplace_back(j);
}
shuffle(ord.begin(), ord.end(), rng);
bool might_done = 0;
int last_done = -1;
for (int j : ord) {
swap(a[i], a[j]);
int tmp = ask(a);
if (tmp - cur == 2) {
done[j] = 1;
cur = tmp;
break;
} else if (tmp - cur == 1) {
cur = tmp;
// a[i] = j || a[j] = i
if (might_done) done[last_done] = 1;
might_done = 1;
last_done = j;
} else if (tmp == cur) {
// a[i] != j && a[i] != i && a[j] != i && a[j] != j
if (might_done) done[last_done] = 1;
might_done = 0;
swap(a[i], a[j]);
} else if (tmp - cur == -1) { // tmp < cur
// a[i] = i || a[j] = j
swap(a[i], a[j]);
if (might_done == 0) {
done[j] = 1;
} else {
break;
}
} else {
done[j] = 1;
swap(a[i], a[j]);
break;
}
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 13 |
2 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 6 |
3 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
4 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 11 |
5 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
6 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 12 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 13 |
2 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 6 |
3 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
4 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 11 |
5 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
6 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 12 |
7 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 500 |
8 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
9 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
10 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
11 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
12 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 500 |
13 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
14 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
15 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
16 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 13 |
2 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 6 |
3 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
4 |
Correct |
1 ms |
500 KB |
Correct! Number of queries: 11 |
5 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 10 |
6 |
Correct |
1 ms |
344 KB |
Correct! Number of queries: 12 |
7 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 500 |
8 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
9 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
10 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
11 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
12 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 500 |
13 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
14 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
15 |
Correct |
4 ms |
344 KB |
Correct! Number of queries: 400 |
16 |
Correct |
3 ms |
344 KB |
Correct! Number of queries: 400 |
17 |
Runtime error |
97 ms |
436 KB |
Execution killed with signal 13 |
18 |
Halted |
0 ms |
0 KB |
- |