# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
940946 | hotboy2703 | Toxic Gene (NOI23_toxic) | C++17 | 8 ms | 600 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |