제출 #364804

#제출 시각아이디문제언어결과실행 시간메모리
364804leinad2버섯 세기 (IOI20_mushrooms)C++17
0 / 100
8 ms364 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; int count_mushrooms(int n) { if(n<=4) { int ans=1; for(int i=1;i<n;i++) { vector<int>v; v.push_back(0);v.push_back(i); if(use_machine(v)==0)ans++; } return ans; } vector<int>qr; int a=0, b=0, x=0, i, j; qr.push_back(0); qr.push_back(1); int ans1=use_machine(qr); qr.pop_back(); qr.push_back(2); int ans2=use_machine(qr); vector<int>v1, v2; if(ans1&&ans2) { v2.push_back(0); x=1; v1.push_back(1);v1.push_back(2); a=1; b=2; } else if(ans1) { v1.push_back(0);v1.push_back(2); v2.push_back(1); a=0; b=2; } else if(ans2) { v1.push_back(0);v1.push_back(1); v2.push_back(2); a=0; b=1; } else { v1.push_back(0);v1.push_back(1);v2.push_back(2); a=0; b=1; } int bu=(int)sqrt(n); for(i=1;i++<bu;) { vector<int>v; v.push_back(a); v.push_back(2*i-1); v.push_back(b); v.push_back(2*i); int ans=use_machine(v); if(ans>=2)v2.push_back(2*i-1); else v1.push_back(2*i-1); if(ans%2==1)v2.push_back(2*i); else v1.push_back(2*i); } if(v1.size()<v2.size()) { v1.clear(); while(v2.size())v1.push_back(v2.back()),v2.pop_back(); x=1-x; } int ans=v1.size(); for(i=2*bu+1;i<n;i+=v1.size()) { vector<int>v; for(j=i;j<min(i+(int)v1.size(), n);j++) { v.push_back(v1[j-i]); v.push_back(j); } int q=use_machine(v); ans+=v.size()/2; ans-=(q/2+q%2); } if(x==1)return n-ans; else return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...