# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
309434 | lucaperju | Counting Mushrooms (IOI20_mushrooms) | C++14 | 10 ms | 640 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 "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;
vector<int> ta,tb,ord;
vector<int>vc;
int v[20003];
int count_mushrooms(int n) {
std::vector<int> m;
/**
for (int i = 0; i < n; i++)
m.push_back(i);
int c1 = use_machine(m);
m = {0, 1};
int c2 = use_machine(m);
return c1+c2;
*/
int i,j;
for(i=1;i<n;++i)
ord.push_back(i);
srand(time(NULL));
random_shuffle(ord.begin(),ord.end());
ta.push_back(0);
i=0;
while(i<ord.size() && ta.size()<2 && tb.size()<2)
{
m.clear();
m.push_back(0);
m.push_back(ord[i]);
int a = use_machine(m);
if(a==0)
ta.push_back(ord[i]);
else
tb.push_back(ord[i]);
++i;
}
int type=1;
if(ta.size()<2)
type=2;
if(ta.size()>=2)
{
vc.push_back(ta[0]);
vc.push_back(ta[1]);
}
else
{
vc.push_back(tb[0]);
vc.push_back(tb[1]);
}
int cnta=0;
int cntc=150;
while(cntc--)
{
if(i+1<ord.size())
{
m.clear();
m.push_back(vc[0]);
m.push_back(ord[i]);
m.push_back(vc[1]);
m.push_back(ord[i+1]);
int a=use_machine(m);
if(type==1)
{
if(a&2)
tb.push_back(ord[i]);
else
ta.push_back(ord[i]);
if(a&1)
tb.push_back(ord[i+1]);
else
ta.push_back(ord[i+1]);
}
else
{
if(a&2)
ta.push_back(ord[i]);
else
tb.push_back(ord[i]);
if(a&1)
ta.push_back(ord[i+1]);
else
tb.push_back(ord[i+1]);
}
i+=2;
}
else if(i<ord.size())
{
m.clear();
m.push_back(0);
m.push_back(ord[i]);
int a = use_machine(m);
if(a==0)
ta.push_back(ord[i]);
else
tb.push_back(ord[i]);
++i;
}
else
break;
}
if(ta.size()>tb.size())
type=1;
else
type=2;
vc.clear();
if(type==1)
for(j=0;j<ta.size();++j)
vc.push_back(ta[j]);
else
for(j=0;j<tb.size();++j)
vc.push_back(tb[j]);
cnta=ta.size();
while(i<ord.size())
{
m.clear();
int catc=0;
for(j=0;j<vc.size() && i<ord.size();++j,++i)
{
m.push_back(vc[j]);
m.push_back(ord[i]);
++catc;
}
int a=use_machine(m);
a=((a+1)>>1);
if(type==2)
cnta+=a;
else
cnta+=catc-a;
}
return cnta;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |