#include <bits/stdc++.h>
using namespace std;
int n, res;
vector<int> v;
set<int> rem;
int a[200];
vector<int> Q;
int ask(int l, int lim) {
Q.clear();
for (int i = l; i <= lim; ++i) if (!a[i]) Q.push_back(i);
// assert(Q.size());
cout << Q.size() << ' ';
for (int i : Q) cout << i << ' ';
cout << endl;
cin >> res; return res;
}
void answer() {
cout << 0 << ' ';
for (int i = 1; i <= n; ++i) cout << a[i] << ' ';
cout << endl;
}
signed main() {
cin >> n; int l, r, mid, pt, num = 1, m;
v.resize(n + 1); iota(v.begin(), v.end(), 0);
for (int i = 1; i <= n; ++i) rem.insert(i);
while (rem.size()) {
pt = 0; m = *prev(rem.end());
// cout << "Remaining : ";
// for (int i : rem) cout << i << ' ';
// cout << endl;
if (ask(1, m) == 1) {
for (int i : rem) a[i] = num;
break;
}
while (pt < m) {
if (ask(1, m - 1) < ask(1, m)) pt = m;
else {
l = pt + 1; r = m - 1;
while (l <= r) {
mid = (l + r) / 2;
// assert(mid < m);
if (ask(mid, m - 1) < ask(mid, m)) r = mid - 1;
else l = mid + 1;
}
pt = r;
}
a[pt] = num; rem.erase(pt);
// cout << "found " << pt << " : " << a[pt] << "!!" << endl;
}
++num;
}
answer();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
111 ms |
420 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
87 ms |
420 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
2 |
Runtime error |
95 ms |
344 KB |
Execution killed with signal 13 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
110 ms |
420 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
97 ms |
424 KB |
Execution killed with signal 13 |
2 |
Halted |
0 ms |
0 KB |
- |