Submission #1210561

#TimeUsernameProblemLanguageResultExecution timeMemory
1210561jadevineCarnival (CEOI14_carnival)C++20
20 / 100
26 ms420 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...