Submission #1137878

#TimeUsernameProblemLanguageResultExecution timeMemory
1137878fryingducCarnival (CEOI14_carnival)C++20
100 / 100
3 ms448 KiB
#include "bits/stdc++.h"
using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif

const int maxn = 155;
int n;
int a[maxn];
int res[maxn];

int ask(vector<int> v) {
  cout << (int)v.size() << ' ';
  for(auto i:v) cout << i << " ";
  cout << endl;
  #ifndef duc_debug
    int x; cin >> x;
    return x;
  #else
    set<int> s;
    for(auto i:v) s.insert(a[i]);
    return (int)s.size();
  #endif
}

void solve() {
  cin >> n;
  #ifdef duc_debug
    for(int i = 1; i <= n; ++i) {
      cin >> a[i];
    }
  #endif
  vector<int> par;
  par.push_back(1);
  int prv = 1;
  for(int i = 2; i <= n; ++i) {
    vector<int> t; for(int j = 1; j <= i; ++j) {
      t.push_back(j);
    }    
    int cur = ask(t);
    if(cur > prv) {
      par.push_back(i);
      prv = cur;
    }
  }
//  debug(par);
  for(int i = 0; i < (int)par.size(); ++i) {
    res[par[i]] = i + 1;
  }
  for(int i = 1; i <= n; ++i) {
    if(res[i]) continue;
    int l = 0, r = (int)par.size() - 1, pos = -1;
    while(l <= r) {
      int mid = (l + r) >> 1;
      vector<int> t;
      for(int j = 0; j <= mid; ++j) {
        t.push_back(par[j]);
      }
      t.push_back(i);
      int se = ask(t);
      if(se == mid + 1) {
        pos = mid;
        r = mid - 1;
      } else {
        l = mid + 1;
      }
    }
    if(pos == -1) {
      assert(false);
    }
    res[i] = res[par[pos]];
  }
  
  cout << 0 << " ";
  for(int i = 1; i <= n; ++i) {
    cout << res[i] << " ";
  }
}

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  solve();

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