# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
357835 | doowey | Counting Mushrooms (IOI20_mushrooms) | C++14 | 11 ms | 512 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 "mushrooms.h"
using namespace std;
const int K = 100;
int count_mushrooms(int n) {
int cnt = 1;
if(n <= 226){
int cur;
for(int i = 1; i < n; i ++ ){
cur = use_machine({0, i});
if(cur == 0) cnt ++ ;
}
return cnt;
}
vector<int> q[2];
q[0].push_back(0);
int id = 1;
int A, B, C, D;
int f;
int cur;
while(max(q[0].size(),q[1].size()) <= K){
if(q[0].size() < 2 && q[1].size() < 2){
cur = use_machine({0, id});
if(cur == 0){
q[0].push_back(id);
}
else{
q[1].push_back(id);
}
id ++ ;
}
else{
if(q[0].size() >= 2){
f = 0;
A = q[0][0];
B = q[0][1];
}
else{
f = 1;
A = q[1][0];
B = q[1][1];
}
C = id;
D = id + 1;
id += 2;
cur = use_machine({A, C, B, D});
if(cur == 0){
q[f].push_back(C);
q[f].push_back(D);
}
else if(cur == 1){
q[f].push_back(C);
q[f^1].push_back(D);
}
else if(cur == 2){
q[f^1].push_back(C);
q[f].push_back(D);
}
else{
q[f^1].push_back(C);
q[f^1].push_back(D);
}
}
}
int lim = max(q[0].size(), q[1].size());
int fa = 0;
if(q[1].size() == lim) fa = 1;
vector<int> ids;
int soln = q[0].size();
int gg;
int sz;
int c1;
for(int i = id; i < n ; i ++ ){
ids.push_back(i);
if(ids.size() == lim || i + 1 == n){
vector<int> qr;
sz = (int)ids.size();
for(int t = 0; t < ids.size(); t ++ ){
qr.push_back(ids[t]);
qr.push_back(q[fa][t]);
}
gg = use_machine(qr);
if(fa == 0){
c1 = (gg + 1) / 2;
soln += sz - c1;
}
else{
soln += (gg + 1) / 2;
}
ids.clear();
}
}
return soln;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |