제출 #306632

#제출 시각아이디문제언어결과실행 시간메모리
306632daniel920712버섯 세기 (IOI20_mushrooms)C++14
68.07 / 100
10 ms384 KiB
#include "mushrooms.h" #include <vector> #include <math.h> using namespace std; vector < int > A,B; vector < int > temp; vector < int > fin; int count_mushrooms(int N) { int k=floor(sqrt(N)),ans=0,x=0,y=0,i,now,tt; for(i=1;i<=min(N-1,2*k);i+=2) { temp.clear(); temp.push_back(0); temp.push_back(i); if(i+1<=min(N-1,2*k)) { temp.push_back(i+1); tt=use_machine(temp); if(tt==0) { A.push_back(i); A.push_back(i+1); y+=2; ans+=2; } else if(tt==2) { A.push_back(i+1); B.push_back(i); x++; y++; ans++; } else { B.push_back(i+1); x++; fin.push_back(i); fin.push_back(i+1); } } else { if(use_machine(temp)) { x++; B.push_back(i); } else { y++; ans++; A.push_back(i); } } } if(!fin.empty()) ans+=(use_machine(fin)+1)/2; if(x>=y) { now=2*k+1; while(now<N) { temp.clear(); for(auto i:B) { temp.push_back(i); if(now<N) { temp.push_back(now); now++; } } if(temp.size()>=2) { tt=use_machine(temp); ans+=(tt+1)/2; } //if(tt%2==0) B.push_back(*prev(temp.end())); } } else { now=2*k+1; while(now<N) { temp.clear(); for(auto i:A) { temp.push_back(i); if(now<N) { temp.push_back(now); now++; } } if(temp.size()>=2) { tt=use_machine(temp); ans+=(temp.size()-y-(tt+1)/2); } } } //ans+=y;*/ return ans+1; }
#Verdict Execution timeMemoryGrader output
Fetching results...