# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
940902 | socpite | Toxic Gene (NOI23_toxic) | C++17 | 5 ms | 348 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<bits/stdc++.h>
#include"toxic.h"
using namespace std;
int query_sample(vector<int> species);
void determine_type(int n){
int l = 1, r = n;
vector<int> vec(n);
vector<bool> done(n+1, 0);
iota(vec.begin(), vec.end(), 1);
while(l < r){
int mid = (l+r)>>1;
if(!query_sample(vector<int>(vec.begin() + l - 1, vec.begin() + mid)))r = mid;
else l = mid+1;
}
vec.erase(vec.begin() + l - 1);
answer_type(l, 'T');
int d = 0;
vector<int> sampling;
vector<int> species;
for(int i = 0; i < vec.size(); i++){
if(species.size() + (1<<d) < 300){
for(int _ = 0; _ < (1<<d); _++)species.push_back(vec[i]);
sampling.push_back(vec[i]);
d++;
}
else {
int tot1 = query_sample(species);
species.push_back(l);
int tot2 = query_sample(species);
// cout << tot1 << " " << tot2 << endl;
for(int j = 0; j < sampling.size(); j++){
if((tot1&tot2)&(1<<j)){
answer_type(sampling[j], 'S');
done[sampling[j]] = 1;
}
else if((tot1^tot2)&(1<<j)){
answer_type(sampling[j], 'R');
done[sampling[j]] = 1;
}
}
sampling = {vec[i]};
species = {vec[i]};
d = 1;
}
}
int tot1 = query_sample(species);
species.push_back(l);
int tot2 = query_sample(species);
for(int j = 0; j < sampling.size(); j++){
if((tot1&tot2)&(1<<j)){
answer_type(sampling[j], 'S');
done[sampling[j]] = 1;
}
else if((tot1^tot2)&(1<<j)){
answer_type(sampling[j], 'R');
done[sampling[j]] = 1;
}
}
for(int i = 1; i <= n; i++){
if(done[i])vec.erase(find(vec.begin(), vec.end(), i));
}
for(auto v: vec){
if(query_sample({v}))answer_type(v, 'R');
else answer_type(v, 'T');
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |