Submission #805026

#TimeUsernameProblemLanguageResultExecution timeMemory
805026PixelCatCounting Mushrooms (IOI20_mushrooms)C++14
56.64 / 100
11 ms392 KiB
#include "mushrooms.h" #ifdef NYAOWO #include "stub.cpp" #endif #include <bits/stdc++.h> #define For(i, a, b) for(int i = a; i <= b; i++) #define Forr(i, a, b) for(int i = a; i >= b; i--) #define F first #define S second #define all(x) x.begin(), x.end() #define sz(x) ((int)x.size()) #define eb emplace_back // #define int LL using namespace std; using i32 = int32_t; using LL = long long; using pii = pair<int, int>; int SQ = 100; int alter(vector<int> jury, vector<int> sus, bool flip) { assert(sz(jury) > sz(sus)); vector<int> q; int n = sz(sus); q.eb(jury.back()); jury.pop_back(); while(sz(sus)) { q.eb(sus.back()); sus.pop_back(); q.eb(jury.back()); jury.pop_back(); } int res = use_machine(q) / 2; if(flip) return res; return n - res; } int count_mushrooms(int n) { vector<int> v0(1, 0); vector<int> v1; int ptr = 1; while(ptr < n && max(sz(v0), sz(v1)) < SQ) { if(use_machine({0, ptr})) v1.eb(ptr); else v0.eb(ptr); ptr++; } int ans = sz(v0); if(ptr == n) return ans; int flip = 0; if(sz(v0) < sz(v1)) { v0.swap(v1); flip = 1; } while(ptr < n) { int r = min(n - 1, ptr + SQ - 2); vector<int> sus; For(i, ptr, r) { sus.eb(i); } ptr = r + 1; ans += alter(v0, sus, flip); } return ans; // 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; } /* 3 0 1 1 4 0 1 0 0 */
#Verdict Execution timeMemoryGrader output
Fetching results...