Submission #1252381

#TimeUsernameProblemLanguageResultExecution timeMemory
1252381rayan_bdCarnival (CEOI14_carnival)C++20
100 / 100
12 ms420 KiB
#include <bits/stdc++.h>
using namespace std;

vector<int> adj[155];
int vis[155], tin = 1;
//vector<int> ar = {1, 1, 2, 3, 4, 5, 6, 7, 7, 10};

void dfs(int u){
    vis[u] = tin;  
    for(auto it : adj[u]){
        if(vis[it] == -1){
            dfs(it);
        }
    }
}

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

    //n = ar.size();

    auto ask = [&](int i, int j){
        if(i > j) return -1;
        if(i == j) return 1;
        int res = 0;
        cout << j - i + 1 << " ";
       // set<int> st;
        while(i <= j){
           // st.insert(ar[i - 1]);
            cout << i << " ";
            i += 1;
        }
        cout << endl << "\n";
        //res = st.size();
        cin >> res;
        return res;
    };
    
    memset(vis, -1, sizeof(vis));
    
    for(int i = 1; i <= n; ++i){
        int st = i, en = n, nxt = -1;
        while(st <= en){
            int mid = st + (en - st) / 2;
            int tp1 = ask(i + 1, mid);
            int tp2 = ask(i, mid);
            if(tp1 == tp2){
                nxt = mid;
                en = mid - 1;
            }else{
                st = mid + 1;
            }
        }
       // if(i == 8) cout << "next:- " << nxt << endl;
        if(nxt > 0) adj[i].push_back(nxt), adj[nxt].push_back(i);
    }

    for(int i = 1; i <= n; ++i){
        if(vis[i] == -1){
            dfs(i);
            tin += 1;
        }
    }

    cout << "0 ";
    for(int i = 1; i <= n; ++i) cout << vis[i] << " ";

    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...