Submission #1019266

#TimeUsernameProblemLanguageResultExecution timeMemory
1019266BoasCounting Mushrooms (IOI20_mushrooms)C++17
92.62 / 100
6 ms604 KiB
#include <bits/stdc++.h> using namespace std; #include "mushrooms.h" #define loop(x, i) for (int i = 0; i < x; i++) #define pb push_back #define ALL(x) (x).begin(), (x).end() typedef vector<int> vi; typedef pair<int, int> ii; typedef set<int> si; typedef vector<vi> vvi; #define getX (max((int)A.size(), (int)B.size())) int count_mushrooms(int n) { vi A = {0}, B; int c1 = use_machine({0, 1}); int i = 2; if (c1 == 1) { if (n == 2) return 1; B.pb(1); int c2 = use_machine({1, 2}); i++; if (c2 == 1) A.pb(2); else B.pb(2); } else { A.pb(1); } while (getX < sqrt((double)n / 3.0)) { if (A.size() >= 2) { if (i + 1 >= n) break; int res = use_machine({A[0], i, A[1], i + 1}); if (res == 0) { A.pb(i); A.pb(i + 1); } else if (res == 1) { A.pb(i); B.pb(i + 1); } else if (res == 2) { A.pb(i + 1); B.pb(i); } else { B.pb(i); B.pb(i + 1); } i += 2; } else { if (i + 1 >= n) break; int res = use_machine({B[0], i, B[1], i + 1}); if (res == 3) { A.pb(i); A.pb(i + 1); } else if (res == 2) { A.pb(i); B.pb(i + 1); } else if (res == 1) { A.pb(i + 1); B.pb(i); } else { B.pb(i + 1); B.pb(i); } i += 2; } } if (i == n - 1) { if (use_machine({0, i}) == 0) A.pb(i); i++; } int res = A.size(); for (; i < n;) { int x = getX; vi q; if (A.size() >= B.size()) { int l = min(getX, n - i); loop(l, j) { q.pb(A.at(j)); q.pb(i + j); } int c3 = use_machine(q); if (c3 % 2 == 1) { c3++; B.pb(i + l - 1); } else { A.pb(i + l - 1); } res += l - (c3 / 2); q.clear(); } else { int l = min(getX, n - i); loop(l, j) { q.pb(B.at(j)); q.pb(i + j); } int c3 = use_machine(q); if (c3 % 2 == 1) { c3++; A.pb(i + l - 1); } else { B.pb(i + l - 1); } res += (c3 / 2); q.clear(); } i += x; } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...