# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
707006 | NemanjaSo2005 | Counting Mushrooms (IOI20_mushrooms) | C++14 | 4 ms | 336 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>
#define ll long long
using namespace std;
ll N,sta[20005],D=141;
bool inv;
vector<int> x,A,B,R;
stack<int> S;
int count_mushrooms(int n){
N=n;
if(N<=D){
sta[0]=1;
for(int i=0;i+1<N;i++){
x.clear();
x.push_back(i);
x.push_back(i+1);
sta[i+1]=sta[i]^use_machine(x);
}
ll res=0;
for(int i=0;i<N;i++)
res+=sta[i];
return res;
}
ll res=1;
for(int i=0;i<N;i++)
sta[i]=2;
sta[0]=1;
A.push_back(0);
for(int i=0;i+1<N;i++){
if(A.size()>=D or B.size()>=D)
break;
x.clear();
x.push_back(i);
x.push_back(i+1);
sta[i+1]=sta[i]^use_machine(x);
if(sta[i+1]==1){
A.push_back(i+1);
res++;
}
else
B.push_back(i+1);
}
if(A.size()>B.size()){
R=A;
inv=1;
}
else{
R=B;
inv=0;
}
for(int i=0;i<N;i++)
if(sta[i]==2)
S.push(i);
int pok;
while(S.size()){
x.clear();
x.push_back(R[0]);
pok=1;
while(pok<R.size() and S.size()){
x.push_back(S.top());
S.pop();
x.push_back(R[pok]);
pok++;
}
int r=use_machine(x);
if(inv)
res+=((R.size()-1)*2-r)/2;
else
res+=r/2;
}
return res;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |