# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
805026 | PixelCat | 버섯 세기 (IOI20_mushrooms) | C++14 | 11 ms | 392 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 = 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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |