제출 #836333

#제출 시각아이디문제언어결과실행 시간메모리
836333maomao90Counting Mushrooms (IOI20_mushrooms)C++17
80.71 / 100
7 ms524 KiB
// I can do all things through Christ who strengthens me // Philippians 4:13 #include "mushrooms.h" #include <bits/stdc++.h> using namespace std; #define REP(i, j, k) for (int i = j; i < (k); i++) #define RREP(i, j, k) for (int i = j; i >= (k); i--) template <class T> inline bool mnto(T &a, const T b) {return a > b ? a = b, 1 : 0;} template <class T> inline bool mxto(T &a, const T b) {return a < b ? a = b, 1 : 0;} typedef long long ll; typedef long double ld; #define FI first #define SE second typedef pair<int, int> ii; typedef pair<ll, ll> pll; #define ALL(x) x.begin(), x.end() #define SZ(x) (int) x.size() #define pb push_back typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ii> vii; typedef tuple<int, int, int> iii; typedef vector<iii> viii; #ifndef DEBUG #define cerr if (0) cerr #endif const int INF = 1000000005; const ll LINF = 1000000000000000005; const int MAXN = 20005; int n; int ans; vi know[2]; int count_mushrooms(int _n) { n = _n; ans = 1; know[0].pb(0); REP (j, 1, min(3, n)) { int r = use_machine({0, j}); know[r].pb(j); ans += r == 0; } int ptr = 3; while (ptr < n) { bool t = SZ(know[1]) > SZ(know[0]); int kptr = 0; vi x; while (ptr < n && kptr < SZ(know[t])) { x.pb(know[t][kptr++]); x.pb(ptr++); } int r = use_machine(x); int occ = r / 2 + (r % 2); if (t) { ans += occ; } else { ans += SZ(x) / 2 - occ; } know[t ^ (r % 2)].pb(ptr - 1); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...