Submission #1052197

#TimeUsernameProblemLanguageResultExecution timeMemory
1052197Huseyn123Counting Mushrooms (IOI20_mushrooms)C++17
80.43 / 100
6 ms600 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 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>1 && cnt1+(n-cnt-1)/mx<=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()){ 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; } } } 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; }

Compilation message (stderr)

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