Submission #1231213

#TimeUsernameProblemLanguageResultExecution timeMemory
1231213neisennCarnival (CEOI14_carnival)C++20
100 / 100
6 ms508 KiB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define eb emplace_back
#define ppb pop_back
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
const char nl = '\n';
int memo[155][155];

void solve(){
    auto ask = [&](int l, int r){
        if (memo[l][r]) return memo[l][r];
        cout << r-l+1 << ' ';
        for (int i = l; i <= r; i++) cout << i << ' ';
        cout << endl;
        int x; cin >> x;
        memo[l][r] = x;
        return memo[l][r];
    };
    int n, cnt = 2;
    cin >> n;
    int ans[n+1];
    memo[1][1] = 1;
    ans[1] = 1;
    for (int i = 2; i <= n; i++){
        int l = 1, r = i-1, ret = -1;
        while (l <= r){
            int mid = (l+r)/2;
            if (ask(mid, i) == ask(mid, i-1)){
                ret = mid;
                l = mid+1;
            }
            else r = mid-1;
        }
        if (ret == -1) ans[i] = cnt++;
        else ans[i] = ans[ret];
        set<int> cnt;
        for (int j = i; j >= 1; j--){
            cnt.insert(ans[j]);
            memo[j][i] = cnt.size();
        }
    };
    cout << "0 ";
    for (int i = 1; i <= n; i++){
        cout << ans[i] << ' ';
    }
    cout << endl;
}

int main(){
    int t = 1; //cin >> t;
    while (t--){
        solve();
    }
    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...