제출 #1137878

#제출 시각아이디문제언어결과실행 시간메모리
1137878fryingduc사육제 (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...