Submission #824259

#TimeUsernameProblemLanguageResultExecution timeMemory
824259thimote75Counting Mushrooms (IOI20_mushrooms)C++14
79.86 / 100
7 ms316 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; using idata = vector<int>; const int QK = 273; int count_mushrooms(int n) { idata Av = { 0 }; idata Bv = { }; if (n < QK) { for (int i = 1; i < n; i ++) { int res = use_machine({ 0, i }); if (res) Bv.push_back(i); else Av.push_back(i); } return Av.size(); } if (use_machine({ 0, 1 }) == 0) Av.push_back(1); else Bv.push_back(1); if (use_machine({ 0, 2 }) == 0) Av.push_back(2); else Bv.push_back(2); if (Av.size() >= 2) { for (int i = 3; i < QK; i += 2) { int res = use_machine({ i, 0, i + 1, Av[1] }); if (res & 1) Bv.push_back(i); else Av.push_back(i); if (res & 2) Bv.push_back(i + 1); else Av.push_back(i + 1); } } else { for (int i = 3; i < QK; i += 2) { int res = use_machine({ i, Bv[0], i + 1, Bv[1] }); if (res & 1) Av.push_back(i); else Bv.push_back(i); if (res & 2) Av.push_back(i + 1); else Bv.push_back(i + 1); } } int offset = 0; int multiplier = 1; if (Bv.size() > Av.size()) { Bv.swap(Av); offset = n; multiplier = -1; } int total = Av.size(); for (int i = QK; i < n; i += Av.size() - 1) { idata templ; int cnt = 0; for (int j = 0; j < Av.size() - 1; j ++) { templ.push_back(Av[j]); if (i + j >= n) continue ; cnt ++; templ.push_back(i + j); } templ.push_back(Av[Av.size() - 1]); int res = use_machine(templ); int c0 = (cnt) - (res >> 1); total += c0; } return offset + multiplier * total; }

Compilation message (stderr)

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