제출 #1336925

#제출 시각아이디문제언어결과실행 시간메모리
1336925eri16사육제 (CEOI14_carnival)C++20
100 / 100
3 ms420 KiB
#include <bits/stdc++.h>
using namespace std;

int n,color=1;
vector <int> diff;
vector <int> vis(1505,0);

int query(vector <int>& v){
    cout<<v.size()<<' ';
    for (auto x : v){cout<<x<<' ';}
    cout<<endl;
    int k;
    cin>>k;
    return k;
}


void run_1(){
    vector <int> v;
    v.push_back(1);
    diff.push_back(1);
    vis[1]=color;
    
    for (int i=2; i<=n; i++){
        v.push_back(i);
        int q = query(v);
        if (q!=v.size()){v.pop_back();}
        else{
            diff.push_back(i);
            color++;
            vis[i]=color;
        }
    }
}

bool func(int l, int r,int ind){
    cout<<(r-l+2)<<' ';
    for (int i=l; i<=r; i++){
        cout<<diff[i]<<' ';
    }
    cout<<ind<<endl;
    
    int k;
    cin>>k;
    
    if (k==(r-l+1)){return true;}
    else{return false;}
}

void run_2(){
    for (int i=1; i<=n; i++){
        if (vis[i]==0){
            
            int l=0;
            int r=diff.size()-1;
            
            while (l<r){
                
                int m = (l+r)/2;
                
                bool b = func(l,m,i);
                
                if (b){r=m;}
                else{l=m+1;}
                
            }
            
            vis[i]=vis[diff[l]];
        }
    }
}

int main(){
    cin>>n;
    
    run_1();
    run_2();
    
    cout<<0<<' ';
    
    for (int i=1; i<=n; i++){
        cout<<vis[i]<<' ';
    }
    cout<<endl;
}
#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...