#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define dbg(x) (cout << (x))
#else
#define dbg(x)
#endif
using vi =vector<int>;
#define pb push_back
#define FOR(i, a, b) for (int i = a; i < b; i++)
int count_mushrooms(int n) {
vi isa(n, 0); isa[0] = 1;
int top_it = min(n, 200);
for (int i = 1; i < top_it; i++) {
isa[i] = 1 - use_machine(vi({0, i}));
}
if (top_it == n) return accumulate(isa.begin(), isa.end(), 0);
int tl_a = accumulate(isa.begin(), isa.end(), 0);
bool using_dark = tl_a < 100;
int first_light = 0, first_dark = 0; while (isa[first_dark]) first_dark++;
vi filter_base(199, using_dark ? first_dark : first_light);
int cur_pos = 0;
for (int i = 0; i < 200 && cur_pos < 200; i++) {
if (isa[i] == using_dark) continue;
filter_base[cur_pos] = i;
cur_pos += 2;
}
for (int i = 200; i < n; i += 99) {
int spots = min(99, n - i);
vi filter(filter_base.begin(), filter_base.end());
int ps = 1;
for (int j = i; j < i + spots; j++) {
filter[ps] = j;
ps += 2;
}
filter.resize(spots*2 + 1);
int tl_non = use_machine(filter) / 2;
if (using_dark) {
tl_a += tl_non;
} else {
tl_a += spots - tl_non;
}
}
return tl_a;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |