#include <bits/stdc++.h>
using namespace std;
int n, ans[200], p[200], c1, c2, call;
map<int, int> linked, mp;
set<int> s;
int ask(vector<int> v) {
int c;
cout << v.size() << " ";
for(auto i: v) cout << i << " ";
cout << endl;
cin >> c;
return c;
}
int main() {
vector<int> v;
cin >> n;
for(int i=1; i<=n; i++) {
ans[i] = -1;
}
int pr=0;
for(int i=1; i<=n/2; i++) {
v.clear();
for(int j=1; j<=i; j++) v.push_back(j);
int c = ask(v);
if(c != pr) {
pr = c;
linked[c] = i;
ans[i] = pr;
s.insert(pr);
}
p[i] = pr;
}
c1 = pr;
pr = 0;
for(int i=n/2+1; i<=n; i++) {
v.clear();
for(int j=n/2+1; j<=i; j++) v.push_back(j);
int c = ask(v);
if(c != pr) {
pr = c;
linked[c+100] = i;
ans[i] = pr+100;
}
p[i] = pr+100;
}
c2 = pr;
call = c1;
for(int i=1; i<=c1; i++) {
v.clear();
for(int i=n/2+1; i<=n; i++) v.push_back(i);
v.push_back(linked[i]);
int ct = ask(v);
if(ct > c2) s.insert(i);
}
for(int i=1; i<=c2; i++) {
for(auto j: s) {
v = {linked[j], linked[i+100]};
int t = ask(v);
if(t == 1) {
mp[i+100] = j;
s.erase(j);
goto jump;
}
}
jump:;
if(mp[i+100] == 0) {
call++;
mp[i+100] = call;
}
}
for(int i=1; i<=n/2; i++) {
if(ans[i] == -1) {
for(int j=1; j<=c1; j++) {
v = {i, linked[j]};
if(ask(v) == 1) {
ans[i] = j;
}
}
}
}
for(int i=n/2+1; i<=n; i++) {
if(ans[i] == -1) {
for(int j=1; j<=c2; j++) {
v = {i, linked[mp[j+100]]};
if(ask(v) == 1) {
ans[i] = mp[j+100];
}
}
}
}
cout << 0;
for(int i=1; i<=n; i++) {
if(ans[i] > 100) ans[i] = mp[ans[i]];
cout << " " << ans[i];
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |