# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
430470 | amoo_safar | 버섯 세기 (IOI20_mushrooms) | C++17 | 1 ms | 200 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "mushrooms.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define all(x) x.begin(), x.end()
using namespace std;
int count_mushrooms(int n) {
if(n == 2)
return 2 - use_machine({0, 1});
vector<int> A[2];
A[0].pb(0);
int res = use_machine({0, 1});
int x = 2;
if(res){
A[1].pb(1);
res = use_machine({0, 2});
x = 3;
if(res) A[1].pb(2);
else A[0].pb(2);
} else A[0].pb(1);
vector<int> rem;
int lim = 100;
for(int _ = 0; _ < lim; _ ++){
if(x + 1 >= n) break;
int id = 1;
if(A[0].size() >= A[1].size()) id = 0;
int r1 = x, r2 = x + 1; x += 2;
res = use_machine({ r1, A[id][0], r2, A[id][1]});
A[id ^ (res & 1)].pb(r1);
A[id ^ (res >>1)].pb(r2);
}
vector<int> c(2, 0);
while(x < n){
int id = 1;
if(A[0].size() >= A[1].size()) id = 0;
int mx = A[id].size();
int dl = min(mx, n - x);
vector<int> ASK;
for(int j = 0; j < dl; j++){
ASK.pb(x + j);
ASK.pb(A[id][j]);
}
int mid = dl - 1;
A[id ^ (res & 1)].pb(x);
c[id ^ 1] += res / 2;
c[id] += (mid - (res / 2));
x += dl;
}
return c[0] + A[0].size();
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |