Submission #1059125

#TimeUsernameProblemLanguageResultExecution timeMemory
1059125Huseyn123버섯 세기 (IOI20_mushrooms)C++17
92.24 / 100
5 ms608 KiB
#include "mushrooms.h" #include <bits/stdc++.h> #define pb push_back using namespace std; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int count_mushrooms(int n) { vector<int> c; for(int i=1;i<n;i++){ c.push_back(i); } shuffle(c.begin(),c.end(),rng); vector<int> v0,v1; v0.push_back(0); int cnt=0; int cnt1=0; int i=0; while(i<n-1){ if((v0.size()<2 && v1.size()<2) || i==n-2){ int h=use_machine({c[i],0}); if(h==0){ v0.push_back(c[i]); } else{ v1.push_back(c[i]); } cnt=i+1; i++; cnt1++; } else{ if(v0.size()>=2){ int h=use_machine({v0[0],c[i],v0[1],c[i+1]}); if(h==0){ v0.push_back(c[i]); v0.push_back(c[i+1]); } else if(h==1){ v1.push_back(c[i+1]); v0.push_back(c[i]); } else if(h==2){ v1.push_back(c[i]); v0.push_back(c[i+1]); } else{ v1.push_back(c[i]); v1.push_back(c[i+1]); } } else{ int h=use_machine({v1[0],c[i],v1[1],c[i+1]}); if(h==0){ v1.push_back(c[i]); v1.push_back(c[i+1]); } else if(h==1){ v0.push_back(c[i+1]); v1.push_back(c[i]); } else if(h==2){ v0.push_back(c[i]); v1.push_back(c[i+1]); } else{ v0.push_back(c[i]); v0.push_back(c[i+1]); } } cnt=i+2; i+=2; cnt1++; } int mx=max((int)v0.size(),(int)v1.size()); if(mx>=100){ break; } } int res=(int)v0.size(); vector<int> v=v0; int tp=0; if((int)v1.size()>(int)v0.size()){ tp=1; } vector<int> d; int mx=max((int)v0.size(),(int)v1.size()); for(int i=cnt;i<n-1;i++){ if(tp==0){ d.push_back(v0[(int)d.size()/2]); } else{ d.push_back(v1[(int)d.size()/2]); } d.push_back(c[i]); if((int)d.size()==2*mx){ int h=use_machine(d); int sz=(int)d.size(); d.clear(); if(tp){ res+=h/2+h%2; if(h%2){ v0.pb(c[i]); } else{ v1.pb(c[i]); } } else{ res+=sz/2-h/2-h%2; if(h%2){ v1.pb(c[i]); } else{ v0.pb(c[i]); } } } if((int)v0.size()>(int)v1.size()){ tp=0; } else{ tp=1; } mx=max((int)v0.size(),(int)v1.size()); } if((int)d.size()>0){ int h=use_machine(d); int sz=(int)d.size(); d.clear(); if(tp){ res+=h/2+h%2; } else{ res+=sz/2-h/2-h%2; } } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...