Submission #1299057

#TimeUsernameProblemLanguageResultExecution timeMemory
1299057orgiloogiiCounting Mushrooms (IOI20_mushrooms)C++20
0 / 100
4 ms432 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; //int count_mushrooms(int n) { // std::vector<int> m; // for (int i = 0; i < n; i++) // m.push_back(i); // int c1 = use_machine(m); // m = {0, 1}; // int c2 = use_machine(m); // return c1+c2; //} int count_mushrooms(int n) { // vector <int> m; vector <int> as, bs; as.push_back(0); if (use_machine({0, 1}) == 1) { bs.push_back(1); if (n == 2) { return 1; } if (use_machine({0, 2}) == 1) { bs.push_back(2); } else { as.push_back(2); } } else { as.push_back(1); if (n == 2) { return 2; } if (use_machine({0, 2}) == 1) { bs.push_back(2); } if (use_machine({0, 2}) == 0) { as.push_back(2); } } int i = 3; if (bs.size() == 2) { while (i < n - 1 && as.size() < 100 && bs.size() < 100) { int c = use_machine({bs[0], i, bs[1], i + 1}); if (c == 3) { as.push_back(i); as.push_back(i + 1); } else if (c == 2) { as.push_back(i); bs.push_back(i + 1); } else if (c == 1) { as.push_back(i + 1); bs.push_back(i); } else { bs.push_back(i); bs.push_back(i + 1); } i += 2; } } else { while (i < n - 1 && as.size() < 100 && bs.size() < 100) { int c = use_machine({as[0], i, as[1], i + 1}); if (c == 3) { bs.push_back(i); bs.push_back(i + 1); } else if (c == 2) { bs.push_back(i); as.push_back(i + 1); } else if (c == 1) { bs.push_back(i + 1); as.push_back(i); } else { as.push_back(i); as.push_back(i + 1); } i += 2; } } if (i == n) { return as.size(); } if (i == n - 1) { if (use_machine({0, i}) == 1) { return as.size(); } else { return as.size() + 1; } } int ans = as.size(); if (bs.size() == 100) { while (i < n) { int j = i; vector <int> m; while (j < n && j < i + 100) { m.push_back(bs[j - i]); m.push_back(j); j++; } int c = use_machine(m); if (c % 2 == 1) { ans += 1; } ans += c / 2; i = j; } return ans; } while (i < n) { int j = i; int cnt = 0; vector <int> m; while (j < n && j < i + 100) { m.push_back(as[j - i]); m.push_back(j); j++; cnt++; } int c = use_machine(m); if (c % 2 == 1) { c++; ans += cnt - (c / 2); } else { ans += cnt - (c / 2); } i = j; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...