Submission #1007589

#TimeUsernameProblemLanguageResultExecution timeMemory
1007589PenguinsAreCuteCounting Mushrooms (IOI20_mushrooms)C++17
80.14 / 100
7 ms596 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; int arr1[6]={8,1,12,3,14,7}; int arr2[7]={69,4,20-7,6,9,4-2+0*9,11}; int SQ = 140; int count_mushrooms(int n) { if(n<=2*SQ) { int ans = 1; for(int i=1;i<n;i++) ans += !use_machine({0,i}); return ans; } vector<int> A={0}, B; for(int i=1;i<=2*SQ;i+=2) { if(A.size()<2) { int erm = use_machine({i,0,i+1}); if(!erm) A.push_back(i), A.push_back(i+1); else if(erm==2) B.push_back(i), B.push_back(i+1); else if(use_machine({0,i})) B.push_back(i), A.push_back(i+1); else A.push_back(i), B.push_back(i+1); } else { int guy = use_machine({i,A[0],i+1,A[1]}); for(int j=0;j<2;j++) { if(guy&(1<<j)) B.push_back(i+j); else A.push_back(i+j); } } } int ans = A.size(); if(A.size()>B.size()) { vector<int> v={A[0]}; for(int j=2*SQ+1;j<n;j++) { v.push_back(j); v.push_back(A[((j-1)%SQ)+1]); if(j==n-1||(!(j%SQ))) {ans += (v.size()-1-use_machine(v))/2; v={A[0]};} } } else { vector<int> v={B[0]}; for(int j=2*SQ+1;j<n;j++) { v.push_back(j); v.push_back(B[((j-1)%SQ)+1]); if(j==n-1||!(j%SQ)) {ans += use_machine(v)/2; v={B[0]};} } } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...