제출 #550755

#제출 시각아이디문제언어결과실행 시간메모리
550755tinjyu버섯 세기 (IOI20_mushrooms)C++14
91.87 / 100
11 ms460 KiB
#include "mushrooms.h" #include <iostream> using namespace std; long long int red[100005],blue[100005],rp,bp; int r(int x) { rp++; red[rp]=x; return 0; } int b(int x) { bp++; blue[bp]=x; return 0; } int count_mushrooms(int n) { if(n<=226) { long long int ans=1; for(int i=1;i<n;i++) { vector<int> m; m={0,i}; int tmp=use_machine(m); if(tmp==0)ans++; } return ans; } rp=0,bp=-1; red[rp]=0; for(int i=1;i<=min(3,n);i++) { vector<int>m; m.push_back(0); m.push_back(i); int tmp=use_machine(m); if(tmp==1) { bp++; blue[bp]=i; } else { rp++; red[rp]=i; } } if(rp>=1) { for(int i=2;i<=min(80,n);i++) { vector<int>m; m.push_back(i*2); m.push_back(red[0]); m.push_back(i*2+1); m.push_back(red[1]); int tmp=use_machine(m); //cout<<tmp<<endl; if(tmp==0) { r(i*2); r(i*2+1); } if(tmp==1) { b(i*2); r(i*2+1); } if(tmp==2) { r(i*2); b(i*2+1); } if(tmp==3) { b(i*2); b(i*2+1); } } } else { for(int i=2;i<=min(80,n);i++) { vector<int>m; m.push_back(i*2); m.push_back(blue[0]); m.push_back(i*2+1); m.push_back(blue[1]); int tmp=use_machine(m); if(tmp==0) { b(i*2); b(i*2+1); } if(tmp==1) { r(i*2); b(i*2+1); } if(tmp==2) { b(i*2); r(i*2+1); } if(tmp==3) { r(i*2); r(i*2+1); } } } long long int p=162,ans=rp+1; while(p<n) { vector<int> m; if(rp<bp) { //m.push_back(p); //p++; long long int num=0; for(int i=0;i<bp;i++) { if(p<n) { m.push_back(blue[i]); m.push_back(p); num++; } else break; p++; } int tmp=use_machine(m); ans+=tmp/2; if(tmp%2==1) { ans++; r(p-1); } else { b(p-1); } } else { //m.push_back(p); //p++; long long int num=0; for(int i=0;i<rp;i++) { //cout<<red[i]<<" "<<p<<" "; if(p<n) { m.push_back(red[i]); m.push_back(p); num++; } else break; p++; } int tmp=use_machine(m); ans+=num-(long long int)(tmp/2); //cout<<num<<" "<<tmp<<endl; if(tmp%2==1) { ans--; b(p-1); } else { r(p-1); } } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...