# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
805099 | PixelCat | 버섯 세기 (IOI20_mushrooms) | C++14 | 0 ms | 208 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 = 101;
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) {
if(n <= 227) {
int ans = 0;
For(i, 1, n - 1) {
ans += 1 - use_machine({0, i});
}
return ans;
}
vector<int> v0(1, 0);
vector<int> v1;
vector<pii> oao;
vector<int> sussy;
Forr(i, n - 1, 1) sussy.eb(i);
for(int i = 1; i < 220; i += 3) {
For(_, 1, 3) sussy.pop_back();
int r1 = use_machine({0, i, i + 1, i + 2});
if(r1 % 2) {
v1.eb(i + 2);
if(r1 == 3) {
v1.eb(i);
v0.eb(i + 1);
} else {
int r2 = use_machine({i, i + 1, 0});
(r2 == 1 ? v1 : v0).eb(i);
(r2 == 0 ? v0 : v1).eb(i + 1);
}
} else {
v0.eb(i + 2);
if(r1 == 0) {
v0.eb(i);
v0.eb(i + 1);
} else {
oao.eb(i, i + 1);
}
}
}
if(!sz(v1)) {
for(auto &i:oao) {
sussy.eb(i.F);
sussy.eb(i.S);
}
} else {
int p = v1.back();
for(auto &i:oao) {
int r = use_machine({i.F, i.S, p});
(r == 1 ? v0 : v1).eb(i.F);
(r == 2 ? v0 : v1).eb(i.S);
}
}
int ans = sz(v0);
int flip = 0;
if(sz(v0) < sz(v1)) {
v0.swap(v1);
flip = 1;
}
while(sz(sussy)) {
int r = min(sz(sussy), SQ - 1);
vector<int> sus;
For(i, 1, r) {
sus.eb(sussy.back());
sussy.pop_back();
}
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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |