#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>;
pii alter(vector<int> jury, vector<int> sus, bool flip) {
assert(sz(jury) >= sz(sus));
vector<int> q;
int n = sz(sus);
while(sz(sus)) {
q.eb(jury.back()); jury.pop_back();
q.eb(sus.back()); sus.pop_back();
}
int res = use_machine(q);
int cnt = (res + 1) / 2;
if(flip) return pii(cnt, 1 - res % 2);
return pii(n - cnt, res % 2);
}
pii ask2(int j1, int j2, int x1, int x2, int flip) {
int cnt = use_machine({j1, x1, j2, x2});
pii res;
res.F = ((cnt & 2) != 0);
res.S = ((cnt & 1) != 0);
if(flip) {
res.F = 1 - res.F;
res.S = 1 - res.S;
}
return res;
}
int count_mushrooms(int n) {
if(n <= 227) {
int ans = 1;
For(i, 1, n - 1) {
ans += 1 - use_machine({0, i});
}
return ans;
}
vector<int> v0(1, 0);
vector<int> v1;
For(i, 1, 2) {
if(use_machine({0, i})) v1.eb(i);
else v0.eb(i);
if(max(sz(v0), sz(v1)) == 2) break;
}
int ptr = sz(v0) + sz(v1);
for(; ptr < n - 1 && ptr < 160;) {
pii res;
if(sz(v1) > sz(v0)) {
res = ask2(v1[0], v1[1], ptr, ptr + 1, true);
} else {
res = ask2(v0[0], v0[1], ptr, ptr + 1, false);
}
(res.F ? v1 : v0).eb(ptr);
(res.S ? v1 : v0).eb(ptr + 1);
ptr += 2;
}
// for(auto &i:v0) cerr << i << " ";
// cerr << "\n";
// for(auto &i:v1) cerr << i << " ";
// cerr << "\n";
int ans = sz(v0);
int flip = 0;
while(ptr < n) {
if(sz(v0) < sz(v1)) {
v0.swap(v1);
flip = 1 - flip;
}
int r = min(n - ptr, sz(v0));
vector<int> sus;
For(i, 1, r) {
sus.eb(ptr);
ptr++;
}
auto res = alter(v0, sus, flip);
ans += res.F;
if(res.S == flip) v0.eb(sus[0]);
else v1.eb(sus[0]);
}
return ans;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
0 ms |
208 KB |
Output is correct |
3 |
Correct |
0 ms |
208 KB |
Output is correct |
4 |
Correct |
1 ms |
208 KB |
Output is correct |
5 |
Correct |
1 ms |
208 KB |
Output is correct |
6 |
Correct |
1 ms |
208 KB |
Output is correct |
7 |
Correct |
6 ms |
324 KB |
Output is correct |
8 |
Correct |
5 ms |
352 KB |
Output is correct |
9 |
Correct |
4 ms |
336 KB |
Output is correct |
10 |
Correct |
5 ms |
344 KB |
Output is correct |
11 |
Partially correct |
7 ms |
332 KB |
Output is partially correct |
12 |
Correct |
5 ms |
308 KB |
Output is correct |
13 |
Correct |
5 ms |
336 KB |
Output is correct |
14 |
Correct |
4 ms |
336 KB |
Output is correct |
15 |
Partially correct |
6 ms |
344 KB |
Output is partially correct |
16 |
Partially correct |
5 ms |
448 KB |
Output is partially correct |
17 |
Correct |
3 ms |
208 KB |
Output is correct |
18 |
Correct |
5 ms |
468 KB |
Output is correct |
19 |
Partially correct |
6 ms |
324 KB |
Output is partially correct |
20 |
Correct |
6 ms |
340 KB |
Output is correct |
21 |
Correct |
6 ms |
356 KB |
Output is correct |
22 |
Partially correct |
6 ms |
336 KB |
Output is partially correct |
23 |
Correct |
5 ms |
336 KB |
Output is correct |
24 |
Correct |
4 ms |
336 KB |
Output is correct |
25 |
Partially correct |
5 ms |
352 KB |
Output is partially correct |
26 |
Partially correct |
4 ms |
352 KB |
Output is partially correct |
27 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
28 |
Partially correct |
7 ms |
336 KB |
Output is partially correct |
29 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
30 |
Partially correct |
6 ms |
344 KB |
Output is partially correct |
31 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
32 |
Partially correct |
6 ms |
352 KB |
Output is partially correct |
33 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
34 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
35 |
Partially correct |
7 ms |
348 KB |
Output is partially correct |
36 |
Partially correct |
6 ms |
336 KB |
Output is partially correct |
37 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
38 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
39 |
Partially correct |
5 ms |
344 KB |
Output is partially correct |
40 |
Partially correct |
5 ms |
332 KB |
Output is partially correct |
41 |
Partially correct |
5 ms |
356 KB |
Output is partially correct |
42 |
Partially correct |
6 ms |
336 KB |
Output is partially correct |
43 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
44 |
Partially correct |
6 ms |
364 KB |
Output is partially correct |
45 |
Partially correct |
6 ms |
468 KB |
Output is partially correct |
46 |
Partially correct |
5 ms |
324 KB |
Output is partially correct |
47 |
Partially correct |
5 ms |
328 KB |
Output is partially correct |
48 |
Partially correct |
5 ms |
348 KB |
Output is partially correct |
49 |
Partially correct |
6 ms |
356 KB |
Output is partially correct |
50 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
51 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
52 |
Partially correct |
4 ms |
356 KB |
Output is partially correct |
53 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
54 |
Partially correct |
6 ms |
316 KB |
Output is partially correct |
55 |
Partially correct |
5 ms |
304 KB |
Output is partially correct |
56 |
Partially correct |
6 ms |
336 KB |
Output is partially correct |
57 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
58 |
Partially correct |
6 ms |
332 KB |
Output is partially correct |
59 |
Partially correct |
4 ms |
336 KB |
Output is partially correct |
60 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
61 |
Partially correct |
5 ms |
336 KB |
Output is partially correct |
62 |
Correct |
0 ms |
208 KB |
Output is correct |
63 |
Correct |
0 ms |
208 KB |
Output is correct |
64 |
Correct |
0 ms |
208 KB |
Output is correct |
65 |
Correct |
0 ms |
208 KB |
Output is correct |
66 |
Correct |
1 ms |
208 KB |
Output is correct |
67 |
Correct |
0 ms |
208 KB |
Output is correct |
68 |
Correct |
0 ms |
208 KB |
Output is correct |
69 |
Correct |
0 ms |
208 KB |
Output is correct |
70 |
Correct |
0 ms |
208 KB |
Output is correct |
71 |
Correct |
0 ms |
208 KB |
Output is correct |
72 |
Correct |
0 ms |
208 KB |
Output is correct |
73 |
Correct |
1 ms |
208 KB |
Output is correct |
74 |
Correct |
0 ms |
208 KB |
Output is correct |
75 |
Correct |
0 ms |
208 KB |
Output is correct |
76 |
Correct |
0 ms |
208 KB |
Output is correct |
77 |
Correct |
1 ms |
208 KB |
Output is correct |
78 |
Correct |
1 ms |
208 KB |
Output is correct |
79 |
Correct |
0 ms |
208 KB |
Output is correct |
80 |
Correct |
0 ms |
208 KB |
Output is correct |
81 |
Correct |
0 ms |
208 KB |
Output is correct |
82 |
Correct |
0 ms |
208 KB |
Output is correct |
83 |
Correct |
0 ms |
208 KB |
Output is correct |
84 |
Correct |
0 ms |
208 KB |
Output is correct |
85 |
Correct |
0 ms |
208 KB |
Output is correct |
86 |
Correct |
0 ms |
208 KB |
Output is correct |
87 |
Correct |
0 ms |
208 KB |
Output is correct |
88 |
Correct |
0 ms |
208 KB |
Output is correct |
89 |
Correct |
0 ms |
208 KB |
Output is correct |
90 |
Correct |
0 ms |
208 KB |
Output is correct |
91 |
Correct |
0 ms |
208 KB |
Output is correct |