Submission #1293372

#TimeUsernameProblemLanguageResultExecution timeMemory
1293372lambd47Counting Mushrooms (IOI20_mushrooms)C++20
77.93 / 100
4 ms492 KiB
#include<bits/stdc++.h> #include "mushrooms.h" using namespace std; #define ll long long #define sz(v) ((int)(v).size()) #define all(v) (v).begin(), (v).end() #define L(i, j, k) for(int i = (j); i <= (k); ++i) #define R(i, j, k) for(int i = (j); i >= (k); --i) int count_mushrooms(int n) { vector<int> ids(n-1); iota(all(ids),1); reverse(all(ids)); vector<int> tipo[2]; tipo[0].clear();tipo[1].clear(); tipo[0].push_back(0); vector<int> aux; int resp=0; while(!ids.empty() && sz(tipo[0])<2 && sz(tipo[1])<2){ aux.clear(); aux.push_back(0); aux.push_back(ids.back()); int v=use_machine(aux); tipo[v].push_back(ids.back()); ids.pop_back(); } int at=0; if(sz(tipo[1])==2)at=1; const int m=110; while(sz(ids)>1 && sz(tipo[0])<m && sz(tipo[1])<m){ aux.clear(); int a=ids.back(); ids.pop_back(); int b=ids.back(); ids.pop_back(); aux={tipo[at][0],a,tipo[at][1],b}; int v=use_machine(aux); if(v&1){//ponta eh da cor oposta tipo[1^at].push_back(b); }else{ tipo[at].push_back(b); } if(v&2){ tipo[1^at].push_back(a); }else{ tipo[at].push_back(a); } } if(sz(ids)==1){ aux.clear(); aux={0,ids.back()}; ids.pop_back(); resp+=1^use_machine(aux); } if(sz(ids)==0){ return resp+sz(tipo[0]); } at=0; if(sz(tipo[1])>=m)at=1; resp+=sz(tipo[0]); while(!ids.empty()){ int vida=m-1; aux.clear(); while(vida>=0 && !ids.empty()){ aux.push_back(tipo[at][vida]); aux.push_back(ids.back()); ids.pop_back(); vida--; } int v=use_machine(aux); if(v&1)v++; if(at==1){ resp+=v/2; } else{ resp+=sz(aux)/2-v/2; } } return resp; }
#Verdict Execution timeMemoryGrader output
Fetching results...