Submission #940946

#TimeUsernameProblemLanguageResultExecution timeMemory
940946hotboy2703Toxic Gene (NOI23_toxic)C++17
29.95 / 100
8 ms600 KiB
#include "toxic.h" #include<bits/stdc++.h> using namespace std; using ll = int; using ull = unsigned long long; using ld = long double; #define pll pair <ll,ll> #define fi first #define se second #define sz(a) (ll((a).size())) #define BIT(mask,i) (((mask) >> (i))&1) #define MASK(i) (1LL << (i)) #define MP make_pair ll ans[310]; //0 thuong 1 doc 2 manh ll query(ll l,ll r){ vector <ll> all; for (ll i = l;i <= r;i ++)all.push_back(i); ll x = query_sample(all); return x; } void solve(ll l,ll r){ if (l==r){ans[l]=1;return;} ll mid = (l + r) >> 1; if (query(l,mid)!=mid-l+1){ solve(l,mid); if (query(mid+1,r)!=r-mid){ solve(mid+1,r); } } else solve(mid+1,r); } void determine_type(int n){ for (ll i = 1;i <= n;i ++)ans[i] = -1; for (ll i = 1;i <= n;i += 8){ if (query(i,min(i+7,n))!=min(i+7,n) - i + 1)solve(i,min(i+7,n)); } ll poison = -1; vector <ll> rem; for (ll i = 1;i <= n;i ++){ if (ans[i] == 1){ poison = i; } else{ rem.push_back(i); } } // for (auto x:rem)cout<<x<<' '; // cout<<'\n'; while (sz(rem)){ vector <ll> cur; while (sz(rem) && sz(cur) < 8){cur.push_back(rem.back());rem.pop_back();} vector <ll> all; for (ll j = 0;j < sz(cur);j ++){ for (ll k = 0;k < MASK(j);k ++){ all.push_back(cur[j]); } } all.push_back(poison); ll x = query_sample(all); for (ll j = 0;j < sz(cur);j ++){ if (BIT(x,j)){ ans[cur[j]] = 2; } else ans[cur[j]] = 0; } } for (ll i = 1;i <= n;i ++){ if (ans[i]==0)answer_type(i,'R'); if (ans[i]==2)answer_type(i,'S'); if (ans[i]==1)answer_type(i,'T'); } }
#Verdict Execution timeMemoryGrader output
Fetching results...