제출 #759787

#제출 시각아이디문제언어결과실행 시간메모리
759787MilosMilutinovic버섯 세기 (IOI20_mushrooms)C++14
92.62 / 100
7 ms452 KiB
#include "mushrooms.h" #include <bits/stdc++.h> using namespace std; const int C = 150; int count_mushrooms(int n) { if (n <= 227) { int ans = 1; for (int i = 1; i < n; i++) { ans += !use_machine({0, i}); } return ans; } vector<int> a(1, 0), b; for (int i = 1; i < min(n, C); i++) { if (a.size() >= 2) { int qq = use_machine({a[0], i, a[1], i + 1}); if (qq & 1) b.push_back(i + 1); else a.push_back(i + 1); if (qq & 2) b.push_back(i); else a.push_back(i); i += 1; continue; } if (b.size() >= 2) { int qq = use_machine({b[0], i, b[1], i + 1}); if (qq & 1) a.push_back(i + 1); else b.push_back(i + 1); if (qq & 2) a.push_back(i); else b.push_back(i); i += 1; continue; } if (use_machine({0, i}) == 1) b.push_back(i); else a.push_back(i); } sort(a.begin(), a.end()); sort(b.begin(), b.end()); int pos = 0; if (!a.empty()) pos = max(pos, a.back()); if (!b.empty()) pos = max(pos, b.back()); int ans = a.size(); for (int i = pos + 1; i < n; i++) { int sz = max(a.size(), b.size()); vector<int> qv; int cnt = 0; for (int j = i; j < min(i + sz, n); j++) { if (j != i + sz) { if (a.size() == sz) qv.push_back(a[j - i]); else qv.push_back(b[j - i]); cnt += 1; } qv.push_back(j); } int qq = use_machine(qv); int diff = (qq + 1) / 2; int same = (qv.size() - cnt - diff); if (a.size() == sz) ans += same; else ans += diff; int is_match = (qq % 2 == 0 ? 1 : 0); if (a.size() != sz) is_match = 1 - is_match; if (is_match) a.push_back(qv.back()); else b.push_back(qv.back()); i = qv.back(); } return ans; }

컴파일 시 표준 에러 (stderr) 메시지

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:60:30: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   60 |                 if (a.size() == sz)
      |                     ~~~~~~~~~^~~~~
mushrooms.cpp:71:22: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   71 |         if (a.size() == sz)
      |             ~~~~~~~~~^~~~~
mushrooms.cpp:76:22: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   76 |         if (a.size() != sz)
      |             ~~~~~~~~~^~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...