제출 #1052504

#제출 시각아이디문제언어결과실행 시간메모리
1052504fuad27버섯 세기 (IOI20_mushrooms)C++17
90.40 / 100
5 ms604 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; int count_mushrooms(int n) { if(n == 2) { return 2-use_machine({0, 1}); } int bb = min(100, n); int ss = use_machine({0, 1}); int tt = use_machine({0, 2}); vector<int> A, B; A.push_back(0); if(ss==0) A.push_back(1); else B.push_back(1); if(tt==0) A.push_back(2); else B.push_back(2); for(int i = 3;i<bb;i+=2) { if(i + 1 < bb) { if(A.size() >= 2) { int val = use_machine(vector{A[0], i, A[1], i+1}); if(val < 2) { A.push_back(i); } else B.push_back(i); if(val%2 == 0) { A.push_back(i+1); } else B.push_back(i+1); } else { int val = use_machine(vector{B[0], i, B[1], i+1}); if(val < 2) { B.push_back(i); } else A.push_back(i); if(val%2 == 0) { B.push_back(i+1); } else A.push_back(i+1); } } else { int val = use_machine(vector{A[0], i}); if(val==0) { A.push_back(i); } else B.push_back(i); } } bool col=0; int szmx=A.size(); int ans=A.size(); if(A.size() < B.size()){ col=1; szmx = B.size(); } for(int i = bb;i<n;i+=szmx) { szmx=A.size(); col=0; if(A.size() < B.size()){ col=1; szmx = B.size(); } vector<int> que; int sz=0; for(int j = 0;j<min(n-i, szmx);j++) { sz++; que.push_back(i+j); if(!col) que.push_back(A[j]); else que.push_back(B[j]); } int val = use_machine(que); if(col) ans+=(val+1)/2; else ans+=sz-(val+1)/2; if(col) { if(val%2)A.push_back(i); else B.push_back(i); } else { if(val%2)B.push_back(i); else A.push_back(i); } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...