Submission #308382

#TimeUsernameProblemLanguageResultExecution timeMemory
308382CodePlatinaCounting Mushrooms (IOI20_mushrooms)C++14
0 / 100
12 ms512 KiB
#include "mushrooms.h" #include <vector> using namespace std; int count_mushrooms(int n) { if(n <= 452) { int ret = 1; for(int i = 1; i < n; i += 2) { if(i == n - 1) ret += 1 - use_machine({0, i}); else ret += 2 - use_machine({i, 0, i + 1}); } return ret; } else { int ret = 0; vector<int> A, B, C; A.push_back(0); for(int i = 1; i < n; ++i) C.push_back(i); while(A.size() < 141 && B.size() < 141) { if(A.size() >= 2) { int x = C.back(); C.pop_back(); int y = C.back(); C.pop_back(); int t = use_machine({A[0], x, A[1], y}); if(t & 1) B.push_back(y); else A.push_back(y); if(t / 2) B.push_back(x); else A.push_back(x); } else if(B.size() >= 2) { int x = C.back(); C.pop_back(); int y = C.back(); C.pop_back(); int t = use_machine({B[0], x, B[1], y}); if(t & 1) A.push_back(y); else B.push_back(y); if(t / 2) A.push_back(x); else B.push_back(x); } else { int x = C.back(); C.pop_back(); int t = use_machine({A[0], x}); if(t) B.push_back(x); else A.push_back(x); } } if(A.size() >= B.size()) { for(int i = 0; i < (int)C.size(); i += (int)A.size()) { int cnt = 0; vector<int> tmp; for(int j = i; j < (int)C.size() && j < i + (int)A.size(); ++j) { ++cnt; tmp.push_back(A[j - i]); tmp.push_back(C[j]); } int t = use_machine(tmp); if(t & 1) ++t; t /= 2; ret += cnt - t; } } else { swap(A, B); for(int i = 0; i < (int)C.size(); i += (int)A.size()) { int cnt = 0; vector<int> tmp; for(int j = i; j < (int)C.size() && j < i + (int)A.size(); ++j) { ++cnt; tmp.push_back(A[j - i]); tmp.push_back(C[j]); } int t = use_machine(tmp); if(t & 1) ++t; t /= 2; ret += t; } } return ret + A.size(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...