#include <bits/stdc++.h>
using namespace std;
int N;
void flush() {
cout << endl;
cout.flush();
}
int query(const vector<int>& people) {
cout << people.size();
for (int p : people) cout << " " << p;
flush(); // very important
int res;
cin >> res;
return res;
}
bool sameCostume(const vector<int>& group, int x) {
int l = 0, r = group.size();
while (r - l > 1) {
int mid = (l + r) / 2;
vector<int> half(group.begin() + l, group.begin() + mid);
half.push_back(x);
int res = query(half);
if (res == half.size() - 1) {
r = mid;
} else {
l = mid;
}
}
vector<int> test = {group[l], x};
return query(test) == 1;
}
int main() {
cin >> N;
vector<vector<int>> groups;
vector<int> costume(N + 1);
for (int i = 1; i <= N; ++i) {
bool found = false;
for (int j = 0; j < groups.size(); ++j) {
if (sameCostume(groups[j], i)) {
groups[j].push_back(i);
found = true;
break;
}
}
if (!found) {
groups.push_back({i});
}
}
for (int i = 0; i < groups.size(); ++i) {
for (int x : groups[i]) {
costume[x] = i + 1;
}
}
cout << 0;
for (int i = 1; i <= N; ++i) cout << " " << costume[i];
flush();
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... |