제출 #1187783

#제출 시각아이디문제언어결과실행 시간메모리
1187783inesfiCarnival (CEOI14_carnival)C++20
100 / 100
6 ms476 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

const int TAILLEMAXI=152;
vector<int> adja[TAILLEMAXI];
int dejavu[TAILLEMAXI];
vector<int> reste;
int tour;

void dfs(int a){
    if (dejavu[a]!=0){
        return ;
    }
    dejavu[a]=tour;
    for (int i:adja[a]){
        dfs(i);
    }
}

bool dedans(vector<int> v,int a){
    if (v.size()==1){
        cout<<2<<" "<<v[0]+1<<" "<<a+1<<endl;
        int val;
        cin>>val;
        if (val==2){
            return false;
        }
        return true;
    }
    cout<<v.size()<<" ";
    for (int i:v){
        cout<<i+1<<" ";
    }
    cout<<endl;
    int val1;
    cin>>val1;
    cout<<v.size()+1<<" ";
    for (int i:v){
        cout<<i+1<<" ";
    }
    cout<<a+1<<endl;
    int val2;
    cin>>val2;
    if (val1==val2){
        return true;
    }
    return false;
}

void trouver(vector<int> v,int a){
    if (v.size()==1){
        //cout<<"adja"<<v[0]+1<<" "<<a+1<<endl;
        adja[v[0]].push_back(a);
        adja[a].push_back(v[0]);
        return ;
    }
    vector<int> moitie;
    moitie.clear();
    for (int i=0;i<(int)v.size()/2;i++){
        moitie.push_back(v[i]);
    }
    //cout<<"quest "<<a+1<<" "<<moitie.size()<<endl;
    if (dedans(moitie,a)){
        trouver(moitie,a);
    }
    else {
        vector<int> autre;
        autre.clear();
        for (int i=(int)moitie.size();i<(int)v.size();i++){
            autre.push_back(v[i]);
        }
        trouver(autre,a);
    }
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int nbpers;
    cin>>nbpers;
    for (int i=0;i<nbpers;i++){
        reste.push_back(i);
    }
    for (int i=nbpers-1;i>=1;i--){
        reste.pop_back();
        if (dedans(reste,i)){
            //cout<<"OUI"<<endl;
            trouver(reste,i);
        }
        else {
            //cout<<"NON"<<endl;
        }
    }
    cout<<0<<" ";
    for (int i=0;i<nbpers;i++){
        if (dejavu[i]==0){
            tour++;
            dfs(i);
        }
        cout<<dejavu[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...