# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
305169 | 2020-09-22T16:46:49 Z | aljasdlas | Counting Mushrooms (IOI20_mushrooms) | C++14 | 1 ms | 256 KB |
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; int count_mushrooms(int n) { if(n < 220 && false) { int B = 0; for(int i = 1; i < n; i++) { B += use_machine({0, i}); } return n-B; } vector<int> perm; for(int i = 1; i < n; i++) perm.push_back(i); srand(time(0)); vector<int> A, B; A = {0}; if(use_machine({0,1})) B.push_back(1); else A.push_back(1); if(use_machine({0,2})) B.push_back(2); else A.push_back(2); if(B.size() > A.size()) swap(A,B); for(int i = 3; i < n && (A.size()-1)*(A.size()-1) < (n-A.size()-B.size()) && (B.size()-1)*(B.size()-1) < (n-A.size()-B.size()); i+=2) { vector<int> cur; cur.push_back(A[0]); cur.push_back(i); cur.push_back(A[1]); if(i+1 < n) cur.push_back(i+1); // for(auto x: cur) cerr << x << " "; // cerr << endl; int res = use_machine(cur); if(res & 2) B.push_back(i); else A.push_back(i); if(i+1 < n) { if(res & 1) B.push_back(i+1); else A.push_back(i+1); } } if(B.size() > A.size()) swap(A,B); int countA = 0; int countB = 0; for(int i = A.size()+B.size(); i < n; i+=A.size()) { vector<int> cur; int j = 0; for(j = 0; i+j < n && j < A.size(); j++) { cur.push_back(A[j]); cur.push_back(i+j); } // for(auto x: cur) cerr << x << " "; // cerr << ": "; int res = use_machine(cur); countB += (res+1)/2; countA += j - ((res+1)/2); if(res % 2 == 0) { B.push_back(cur.back()); } else { A.push_back(cur.back()); } if(B.size() > A.size()) { swap(A,B); i--; } // cerr << res << " -> " << countA << " " << countA << endl;; } if(A[0] == 0) return A.size()+countA; else return B.size()+countB; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 256 KB | Output is correct |
2 | Correct | 0 ms | 256 KB | Output is correct |
3 | Incorrect | 1 ms | 256 KB | Answer is not correct. |
4 | Halted | 0 ms | 0 KB | - |