Submission #1200395

#TimeUsernameProblemLanguageResultExecution timeMemory
1200395Warinchai사육제 (CEOI14_carnival)C++20
0 / 100
2 ms432 KiB
#include<bits/stdc++.h>
using namespace std;
int p[155];
int fp(int u){return p[u]==u?u:p[u]=fp(p[u]);}
void un(int u,int v){
    if(fp(v)>fp(u))swap(u,v);
    return void(p[fp(u)]=fp(v));
}
vector<int>v;
int n;
int get(vector<int>&v){
    cout<<v.size()<<" ";
    for(auto x:v)assert(x<=n),cout<<x<<" ";
    cout<<endl;
    int x;cin>>x;
    return x;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>n;
    for(int i=1;i<=n;i++)p[i]=i;
    v.push_back(1);
    for(int i=2;i<=n;i++){
        v.push_back(i);
        int x=get(v);
        if(x!=v.size()){
            int st=0,en=v.size()-1,ans=0;
            while(st<=en){
                int m=(st+en)/2;
                vector<int>nv;
                for(int j=m;j<v.size();j++){
                    nv.push_back(v[j]);
                }
                int val=get(nv);
                if(val!=nv.size()){
                    ans=m,st=m+1;
                }else{
                    en=m-1;
                }
            }
            assert(ans>=0&&ans<v.size());
            assert(v[ans]<=n);
            un(v[ans],i);
            v.pop_back();
        }
    }
    cout<<"0 ";
    for(int i=1;i<=n;i++)assert(fp(i)<=n),cout<<fp(i)<<" ";
    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...