제출 #1313266

#제출 시각아이디문제언어결과실행 시간메모리
1313266BigBadBully버섯 세기 (IOI20_mushrooms)C++20
56.78 / 100
3 ms492 KiB
#include <bits/stdc++.h> #include "mushrooms.h" using namespace std; const int inf = 1e9; #define pii pair<int,int> #define ff first #define ss second int count_mushrooms(int n) { int bl = 100; vector<int> v(n,1); v[0] = 0; bool dif = 0; int st = 1; vector<int> wh[2]; wh[0].push_back(0); for(;st<n;st++) { v[st] = v[st-1]; if(use_machine({st-1,st})) dif = 1,v[st] = 1-v[st-1]; wh[v[st]].push_back(st); if(max(wh[0].size(),wh[1].size())>bl) break; } st++; int sum = count(v.begin(),v.end(),0); function<int(int,int)> calc = [&](int l,int r) { vector<int> que; array<int,2> idx = {0,0}; bool gurt = 0; function<void()>f = [&](){ for(int it = 0;it < 2;it++) if(wh[it].size()==max(wh[0].size(),wh[1].size())) { que.push_back(wh[it][idx[it]++]); break; } }; f(); for(int i = l; i <= r; i++) { que.push_back(i); f(); } int val = use_machine(que)/2; int len = r-l+1; if(wh[1].size()>wh[0].size()) return val; return len-val; }; for(;st<n;st+=bl) sum+=calc(st,min(st+bl-1,n-1)); return sum; }
#Verdict Execution timeMemoryGrader output
Fetching results...