# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1064335 | new_acc | 버섯 세기 (IOI20_mushrooms) | C++14 | 8 ms | 440 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;
typedef vector<int> vi;
int count_mushrooms(int n) {
int c1 = use_machine({0,1});
if(n==2) return 2-c1;
int c2 = use_machine({0,2});
if(n==3) return 3-c1-c2;
vi x[2];
x[0].push_back(0);
if(c1) x[1].push_back(1);
else x[0].push_back(1);
if(c2) x[1].push_back(2);
else x[0].push_back(2);
bool ok=1;
int a=0,b=0;
if(!c1) a=0,b=1;
else{
if(!c2) a=0,b=2;
else ok^=1,a=1,b=2;
}
int g=3;
for(int i=3;i<n-1;i+=2){
if(x[0].size()>=50 or x[1].size()>=50) break;
int c3=use_machine({i,a,i+1,b});
if((c3&1)) x[ok].push_back(i);
else x[ok^1].push_back(i);
if((c3&2)) x[ok].push_back(i+1);
else x[ok^1].push_back(i+1);
g=i+2;
}
int res=x[0].size();
vi pom=x[0];
bool odw=0;
if(x[1].size()>x[0].size()){
odw=1;
pom=x[1];
}
for(int i=g;i<n;){
vi pom2;
int i2;
for(i2=0;i2+i<n and i2<(int)pom.size();i2++){
pom2.push_back(pom[i2]);
pom2.push_back(i+i2);
}
i+=i2;
int c3=use_machine(pom2);
if(!odw) c3=pom2.size()-1-c3;
res+=(c3+1)/2;
}
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |