제출 #1351177

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

#define int long long
const int INF=1e18;
const int N=200005;

int n;

int ask(vector<int>v){
      cout<<v.size()<<' ';
      for(int x:v) cout<<x<<' ';
      cout<<endl;
      cout.flush();
      int cnt;
      cin>>cnt;
      return cnt;
}

void bf(){
      vector<int>res(n+1,-1);
      int cur=1;
      for(int i=1;i<=n;i++){
            if(res[i]!=-1) continue;
            vector<int>f={i};
            for(int j=i+1;j<=n;j++){
                  f.push_back(j);
                  if(ask(f)==2) f.pop_back();
            }
            for(int id:f) res[id]=cur;
            ++cur;
      }
      cout<<0<<' ';
      for(int i=1;i<=n;i++) cout<<res[i]<<' ';
      cout<<endl;
      cout.flush();
}

void solve(){
      cin>>n;
      vector<int>res(n+1,-1);
      vector<bool>start(n+1,0);
      vector<int>all;
      int last=0;
      int dist_cnt=0;
      for(int i=1;i<=n;i++){
            all.push_back(i);
            int cnt=ask(all);
            if(cnt>last) start[i]=1,++dist_cnt;
            last=cnt;
      }
      if(dist_cnt<=20){
            bf();
            return;
      }
      int cur=1;
      for(int i=1;i<=n;i++){
            if(!start[i]) continue;
            vector<int>f={i};
            for(int j=i+1;j<=n;j++){
                  if(res[j]!=-1) continue;
                  if(start[j]) continue;
                  f.push_back(j);
                  if(ask(f)>1) f.pop_back();
            }
            for(int id:f) res[id]=cur;    
            ++cur;
      }
      cout<<0<<' ';
      for(int i=1;i<=n;i++) cout<<res[i]<<' ';
      cout<<endl;
      cout.flush();
}
signed main(){
      ios_base::sync_with_stdio(false);
      cin.tie(nullptr);
      cout.tie(nullptr);
      int T=1;//cin>>T;
      while(T--) solve();
}
#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...