제출 #1148904

#제출 시각아이디문제언어결과실행 시간메모리
1148904fatman87878Toxic Gene (NOI23_toxic)C++20
41.08 / 100
6 ms328 KiB
#include "toxic.h" #include<bits/stdc++.h> using namespace std; #define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit); #define lb(x) (x)&-(x) #define all(x) (x).begin(),(x).end() #define ll long long constexpr int blk = 8; void determine_type(int n){ mt19937 rng(time(0)); int toxic; vector<int> idx(n),nottoxic,isstrong(n+1),istoxic(n+1); iota(all(idx),1); shuffle(all(idx),rng); int l0 = 0,r0 = n; for(;l0+1<r0;){ int mid=l0+r0>>1; if(query_sample(vector(idx.begin(),idx.begin()+mid))==mid)l0=mid; else r0=mid; } istoxic[toxic = idx[l0]]=1; idx.erase(idx.begin()+l0); for(;!idx.empty();){ int R = min((int)idx.size(),blk); vector<int> ask(1,toxic); for(int cnt = 0,k = 0;k<R;k++,cnt++){ for(int j = 0;j<1<<cnt;j++)ask.emplace_back(idx[k]); } int ret = query_sample(ask); ask.clear(); for(int k = R;k--;){ if(ret>>k&1)isstrong[idx[k]] = 1,idx.erase(idx.begin()+k); else ask.emplace_back(idx[k]); } reverse(all(ask)); int l = 0,r = ask.size(); if(!ask.size()||query_sample(ask))l=ask.size()-1; else { for(;l+1<r;){ int mid=l+r>>1; if(query_sample(vector(ask.begin(),ask.begin()+mid)))l=mid; else r=mid; } istoxic[ask[l]]=1; } for(;l>=0;l--)idx.erase(idx.begin()); } for(int i = 1;i<=n;i++){ if(istoxic[i])answer_type(i,'T'); else if(isstrong[i])answer_type(i,'S'); else answer_type(i,'R'); } } // g++ -DEVAL -std=gnu++17 -O2 -pipe -static -s -o toxic stub.cpp toxic.cpp
#Verdict Execution timeMemoryGrader output
Fetching results...