Submission #1292751

#TimeUsernameProblemLanguageResultExecution timeMemory
1292751enzyCounting Mushrooms (IOI20_mushrooms)C++20
79.58 / 100
4 ms436 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; const int sqt=144; int solve(int n){ int resp=0; vector<int>a, b; a.push_back(0); int id=1; while(max(a.size(),b.size())<=sqt&&id<n){ vector<int>aux; aux.push_back(0); aux.push_back(id); if(use_machine(aux)) b.push_back(id); else a.push_back(id); id++; } resp=a.size(); if(a.size()>=sqt){ //cout << "A" << endl; while(id<n){ vector<int>aux; int qtd=0; for(int i=0;i<a.size()-1;i++){ aux.push_back(a[i]); if(id<n){ aux.push_back(id); id++; qtd++; } } aux.push_back(a.back()); resp+=((2*qtd-use_machine(aux))/2); } }else{ //cout << "B" << endl; while(id<n){ vector<int>aux; int qtd=0; for(int i=0;i<b.size()-1;i++){ aux.push_back(b[i]); if(id<n){ aux.push_back(id); id++; qtd++; } } aux.push_back(b.back()); resp+=(use_machine(aux)/2); } } return resp; } int count_mushrooms(int n){ if(n<=500) return solve(n); int resp=0; vector<int>a, b; a.push_back(0); int id=1; while(max(a.size(),b.size())<=3&&id<n){ vector<int>aux; aux.push_back(0); aux.push_back(id); if(use_machine(aux)) b.push_back(id); else a.push_back(id); id++; } if(a.size()>=3){ while(max(a.size(),b.size())<=sqt&&id<n){ vector<int>aux; aux.push_back(id); id++; aux.push_back(a[0]); aux.push_back(a[1]); aux.push_back(id); id++; aux.push_back(a[2]); int at=use_machine(aux); vector<int>qm={0,3}; for(int k=0;k<2;k++){ if(at&(1<<k)) b.push_back(aux[qm[k]]); else a.push_back(aux[qm[k]]); } } }else{ while(max(a.size(),b.size())<=sqt&&id<n){ vector<int>aux; aux.push_back(id); id++; aux.push_back(b[0]); aux.push_back(b[1]); aux.push_back(id); id++; aux.push_back(b[2]); int at=use_machine(aux); vector<int>qm={0,3}; for(int k=0;k<2;k++){ if(at&(1<<k)) a.push_back(aux[qm[k]]); else b.push_back(aux[qm[k]]); } } } // ja ta certo essa parte resp=a.size(); while(id<n){ if(a.size()>b.size()){ vector<int>aux; int qtd=0; for(int i=0;i<a.size()-1;i++){ aux.push_back(a[i]); if(id<n){ aux.push_back(id); id++; qtd++; } } aux.push_back(a.back()); resp+=((2*qtd-use_machine(aux))/2); }else{ vector<int>aux; int qtd=0; for(int i=0;i<b.size()-1;i++){ aux.push_back(b[i]); if(id<n){ aux.push_back(id); id++; qtd++; } } aux.push_back(b.back()); resp+=(use_machine(aux)/2); } } return resp; }
#Verdict Execution timeMemoryGrader output
Fetching results...