제출 #1031970

#제출 시각아이디문제언어결과실행 시간메모리
1031970hotboy2703버섯 세기 (IOI20_mushrooms)C++17
79.30 / 100
7 ms600 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; using ll = int; #define pll pair <ll,ll> #define fi first #define se second #define MP make_pair #define sz(a) (ll((a).size())) #define BIT(mask,i) (((mask) >> (i))&1) #define MASK(i) (1LL<<(i)) ll use(vector <ll> tmp){ return use_machine(tmp); } int count_mushrooms(int n) { if (n==2){ return 2 - use({0,1}); } vector <ll> c[2]; c[0].push_back(0); c[use({0,1})].push_back(1); c[use({0,2})].push_back(2); ll ptr = 3; ll res = 0; while (ptr < n){ if (max(sz(c[0]),sz(c[1])) >= 120){ ll id = 0; if (sz(c[1]) > sz(c[0]))id = 1; vector <ll> tmp; for (ll j = 0;j < sz(c[id]) && ptr < n;j ++,ptr++){ tmp.push_back(c[id][j]); tmp.push_back(ptr); } ll cur = use(tmp); cur = cur/2+cur%2; if (id==1)res += cur; else res += sz(tmp)/2 - cur; } else{ if (ptr + 1 < n){ if (sz(c[0]) >= 2){ ll tmp = use({ptr,c[0][0],ptr+1,c[0][1]}); c[BIT(tmp,0)].push_back(ptr); c[BIT(tmp,1)].push_back(ptr+1); } else{ ll tmp = use({ptr,c[1][0],ptr+1,c[1][1]}); c[1-BIT(tmp,0)].push_back(ptr); c[1-BIT(tmp,1)].push_back(ptr+1); } ptr+=2; } else{ c[use({0,ptr})].push_back(ptr); ptr++; } } } res += sz(c[0]); return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...