Submission #1052151

#TimeUsernameProblemLanguageResultExecution timeMemory
1052151Huseyn123Counting Mushrooms (IOI20_mushrooms)C++17
25 / 100
64 ms1144 KiB
#include "mushrooms.h" #include <bits/stdc++.h> 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 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++; } 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; } int mx=max((int)v0.size(),(int)v1.size()); if(mx>1 && cnt/2+(n-cnt-1)/(mx-1)<280){ break; } } int res=(int)v0.size(); vector<int> v=v0; int tp=0; if((int)v1.size()>(int)v0.size()){ tp=1; v=v1; } vector<int> d; for(int i=cnt;i<n-1;i++){ d.push_back(v[(int)d.size()/2]); d.push_back(c[i]); if((int)d.size()==2*v.size()-2){ d.push_back(v.back()); int h=use_machine(d); int sz=(int)d.size(); d.clear(); if(tp){ res+=h/2; } else{ res+=sz/2-h/2; } } } if((int)d.size()>0){ d.push_back(v.back()); int h=use_machine(d); int sz=(int)d.size(); d.clear(); if(tp){ res+=h/2; } else{ res+=sz/2-h/2; } } return res; }

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:85:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   85 |   if((int)d.size()==2*v.size()-2){
      |      ~~~~~~~~~~~~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...