제출 #1169594

#제출 시각아이디문제언어결과실행 시간메모리
1169594huutuanToxic Gene (NOI23_toxic)C++20
0 / 100
5 ms328 KiB
#include "toxic.h" #include <bits/stdc++.h> using namespace std; mt19937 rng(69420); void determine_type(int n){ vector<int> ct(n*4, -1), cr(n*4, -1), csr(n*4, -1), cs(n*4, -1); vector<int> mp(n+1); iota(mp.begin(), mp.end(), 0); shuffle(mp.begin()+1, mp.end(), rng); vector<int> answer(n+1, 'R'); auto fake_query_sample=[&](vector<int> v) -> int { for (int &i:v) i=mp[i]; return query_sample(v); }; auto fake_answer_type=[&](int x, char c) -> void { return answer_type(mp[x], c); }; auto query=[&](int l, int r) -> int { vector<int> v(r-l+1); iota(v.begin(), v.end(), l); return fake_query_sample(v); }; int id_t=0; { int l=1, r=n-1; while (l<=r){ int mid=(l+r)>>1; if (query(1, mid)!=mid) r=mid-1; else l=mid+1; } id_t=l; } auto query8=[&](int l, int r){ vector<int> v{id_t}; for (int i=l; i<=r; ++i){ int j=1<<(i-l); while (j--) v.push_back(i); } int x=fake_query_sample(v); for (int i=l; i<=r; ++i){ if (x>>(i-l)&1){ answer[i]='S'; } } }; for (int i=1; i<=n; i+=8) query8(i, min(n, i+7)); vector<int> idx; for (int i=1; i<=n; ++i) if (answer[i]=='R') idx.push_back(i); while (idx.size()){ int sz=min(8, (int)idx.size()); vector<int> v(idx.begin(), idx.begin()+sz); if (fake_query_sample(v)==v.size()){ idx.erase(idx.begin(), idx.begin()+sz); continue; } int l=1, r=7; while (l<=r){ int mid=(l+r)>>1; if (fake_query_sample(vector<int>(idx.begin(), idx.begin()+mid))==mid) l=mid+1; else r=mid-1; } answer[idx[r]]='T'; idx.erase(idx.begin(), idx.begin()+l); } for (int i=1; i<=n; ++i) fake_answer_type(i, answer[i]); }
#Verdict Execution timeMemoryGrader output
Fetching results...