Submission #1351523

#TimeUsernameProblemLanguageResultExecution timeMemory
1351523kantaponzCarnival (CEOI14_carnival)C++20
0 / 100
3 ms416 KiB
#include <bits/stdc++.h>
using namespace std;

const int nx = 155;

int n, c;
int pa[nx];

int fp(int n) {
    if (pa[n] == n) return n;
    return pa[n] = fp(pa[n]);
}

void unite(int u, int v) {
    int pu = fp(u), pv = fp(v);
    if (pu == pv) return;
    pa[pu] = pv;
}

int query(vector<int> q) {
    cout << q.size() << " ";
    for (auto x : q) cout << x << " ";
    cout << endl;
    int ans;
    cin >> ans;
    cout << endl;
    return ans;
}

int main() {
    cin >> n;
    vector<int> q;
    for (int i = 1; i <= n; i++) pa[i] = i, q.push_back(i);
    c = query(q);
    for (int i = 1; i <= n; i++) {
        int l = i, r = n;
        while (l < r) {
            int mid = (l + r + 1) / 2;
            q.clear();
            for (int j = i; j <= mid; j++) q.push_back(j);
            if (query(q) < mid - i + 1) r = mid - 1;
            else l = mid;
        }
        if (l + 1 <= n) {
            q.clear();
            int k = query({i, l + 1});
            if (k == 1) unite(i, l + 1);
        }
    }
    vector<int> ans;
    for (int i = 1; i <= n; i++) ans.push_back(fp(i));
    sort(ans.begin(), ans.end());
    ans.erase(unique(ans.begin(), ans.end()), ans.end());
    cout << 0 << " ";
    for (int i = 1; i <= n; i++) {
        int pu = fp(i);
        cout << lower_bound(ans.begin(), ans.end(), pu) - ans.begin() + 1 << " ";
    }
    cout << endl;
    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...