Submission #813804

#TimeUsernameProblemLanguageResultExecution timeMemory
813804joonwu04Counting Mushrooms (IOI20_mushrooms)C++17
92.24 / 100
7 ms340 KiB
#include "mushrooms.h" #include <vector> #include <iostream> using namespace std; vector<int> a, b; int ans; int type3(vector<int> &v); void type2(int base1, int base2, int isA, int i, int j); void type1(int i); int count_mushrooms(int n) { if(n==2) { return 2-use_machine({0, 1}); } //printf("printOK\n"); a.push_back(0); type1(1); type1(2); //printf("pass1\n"); int k=min(n-1, 140); k -= k%2==1 ? 1:0; // k%2 == 0 for(int i=3; i<=k-1; i+=2) { if(a.size()>=2) { type2(a[0], a[1], 1, i, i+1); } else { type2(b[0], b[1], 0, i, i+1); } } //printf("pass2\n"); ans = a.size(); int i=k+1; while(i<=n-1) { int vSize = min(n-1-i+1, (int)max(a.size(), b.size())); vector<int> v; for(int j=0; j<vSize; j++) { v.push_back(i+j); } ans += type3(v); //printf("%d~%d pass\n", i, i+vSize-1); i = i+vSize; } return ans; } // type3: knowing v by 1 with how many colors are red. int type3(vector<int> &v) { int isA = a.size() >= b.size() ? 1:0; vector<int> &ta = isA ? a:b; vector<int> &tb = isA ? b:a; vector<int> tmp; for(int i=0; i<v.size(); i++) { tmp.push_back(ta[i]); tmp.push_back(v[i]); } int x = use_machine(tmp); if(x%2 == 0) { ta.push_back(v.back()); } else { tb.push_back(v.back()); } int numA = 0; if(x%2 == 0) { numA++; numA += v.size()-1 - x/2; } else { numA += v.size()-1 - (x-1)/2; } return isA ? numA : v.size()-numA; } // type2: knowing 2 by 1 with what color is. And push each of them into red or blue. void type2(int base1, int base2, int isA, int i, int j) { int x = use_machine({base1, i, base2, j}); vector<int> &ta = isA ? a:b; vector<int> &tb = isA ? b:a; if(x == 0) { ta.push_back(i); ta.push_back(j); } else if(x == 1) { ta.push_back(i); tb.push_back(j); } else if(x == 2) { tb.push_back(i); ta.push_back(j); } else { tb.push_back(i); tb.push_back(j); } } // type1: knowing 1 by 1 with what color is. And push it into red or blue. void type1(int i) { if(use_machine({0, i}) == 0) { a.push_back(i); } else { b.push_back(i); } }

Compilation message (stderr)

mushrooms.cpp: In function 'int type3(std::vector<int>&)':
mushrooms.cpp:67:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |  for(int i=0; i<v.size(); i++) {
      |               ~^~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...