Submission #1220196

#TimeUsernameProblemLanguageResultExecution timeMemory
1220196lukasuliashviliCarnival (CEOI14_carnival)C++20
100 / 100
2 ms416 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define rep(i, a, b) for (int i = a; i <= b; i++)
const int N = 2e6;
int ans[N];
vector<int> vec;

void que(int idx) {
    cout << vec.size() + 1 << " ";
    for (auto x : vec) cout << x << " ";
    cout << idx << endl;
    cout.flush(); // <<< FLUSH HERE
}

int binary(int idx) {
    int l = 0, r = vec.size() - 1;
    int res = -1;
    while (l <= r) {
        int mid = (l + r) / 2;
        cout << mid - l + 2 << " "; // +1 for idx
        for (int i = l; i <= mid; i++) cout << vec[i] << " ";
        cout << idx << endl;
        cout.flush(); // <<< FLUSH HERE

        int raod;
        cin >> raod;
        if (raod == mid - l + 2) {
            // all different
            l = mid + 1;
        } else {
            // duplicate found
            res = mid;
            r = mid - 1;
        }
    }
    return ans[vec[res]];
}

signed main() {
    int n;
    cin >> n;

    vec.pb(1);
    ans[1] = 1;

    rep(i, 2, n) {
        que(i);
        int raod;
        cin >> raod;

        if (raod == vec.size() + 1) {
            vec.pb(i);
            ans[i] = vec.size();
        } else {
            ans[i] = binary(i);
        }
    }

    cout << 0 << " ";
    rep(i, 1, n) cout << ans[i] << " ";
    cout << endl;
    cout.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...