Submission #1073044

#TimeUsernameProblemLanguageResultExecution timeMemory
1073044IgnutCounting Mushrooms (IOI20_mushrooms)C++17
79.58 / 100
8 ms604 KiB
// Ignut #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; mt19937 rnd(11223344); int use_machine(vector<int> x); int count_mushrooms(int n) { int res = 1; vector<int> A = {0}, B = {}; vector<int> vec; for (int i = 1; i < n; i ++) vec.push_back(i); shuffle(vec.begin(), vec.end(), rnd); int firstA = 0, secondA = -1; // vector<int> vec; // for (int i = 1; i < n; i ++) vec.push_back(i); int SZ = 160; while (vec.size() > 1) { if (max(A.size(), B.size()) >= SZ) break; int u = vec.back(); vec.pop_back(); int v = vec.back(); vec.pop_back(); if (secondA != -1) { int val = use_machine({firstA, u, secondA, v}); if (val == 0) { res += 2; A.push_back(u); A.push_back(v); } else if (val == 1) { res ++; A.push_back(u); B.push_back(v); } else if (val == 2) { res ++; A.push_back(v); B.push_back(u); } else { B.push_back(u), B.push_back(v); } continue; } int val = use_machine({u, firstA, v}); if (val == 0) { secondA = u; res += 2; A.push_back(u), A.push_back(v); } else if (val == 1) { res ++; val = use_machine({firstA, u}); if (val == 0) { secondA = u; A.push_back(u), B.push_back(v); } else { secondA = v; A.push_back(v), B.push_back(u); } } else { B.push_back(u), B.push_back(v); } } if (vec.size() == 1) { int val = use_machine({firstA, vec.back()}); if (val == 0) { res ++; A.push_back(vec.back()); } else { B.push_back(vec.back()); } vec.pop_back(); } // ============================================================= // // int Q = 200; // for (int i = 0; i < Q; i ++) { // if (vec.empty()) { // return res; // } // int v = vec.back(); vec.pop_back(); // if (use_machine({0, v}) == 0) { // res ++; // A.push_back(v); // } // else { // B.push_back(v); // } // if (max(A.size(), B.size()) >= 130) // break; // } while (!vec.empty()) { int ind = 1; vector<int> ask = {(A.size() >= B.size() ? A[0] : B[0])}; while (ind < max(A.size(), B.size()) && !vec.empty()) { int v = vec.back(); vec.pop_back(); ask.push_back(v); ask.push_back(A.size() >= B.size() ? A[ind] : B[ind]); ind ++; } int val = use_machine(ask); int cnt = ind - 1; if (A.size() >= B.size()) res += cnt - val / 2; else res += val / 2; } return res; }

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:25:37: warning: comparison of integer expressions of different signedness: 'const long unsigned int' and 'int' [-Wsign-compare]
   25 |         if (max(A.size(), B.size()) >= SZ) break;
      |             ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
mushrooms.cpp:106:20: warning: comparison of integer expressions of different signedness: 'int' and 'const long unsigned int' [-Wsign-compare]
  106 |         while (ind < max(A.size(), B.size()) && !vec.empty()) {
      |                ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...