Submission #545123

#TimeUsernameProblemLanguageResultExecution timeMemory
545123LoboCounting Mushrooms (IOI20_mushrooms)C++17
92.62 / 100
10 ms456 KiB
#include "mushrooms.h" #include<bits/stdc++.h> using namespace std; const long long inf = (long long) 1e18 + 10; const int inf1 = (int) 1e9 + 10; // #define int long long #define dbl long double #define endl '\n' #define sc second #define fr first #define mp make_pair #define pb push_back #define all(x) x.begin(), x.end() const int maxn = 2e4 + 10; // int s[maxn]; // int use_machine(vector<int> x) { // const int xs = x.size(); // int diffs = 0; // for (int i = 1; i < xs; i++) // diffs += int(s[x[i]] != s[x[i-1]]); // return diffs; // } int a[maxn]; int count_mushrooms(int n) { int B = 80; vector<int> va, vb; a[0] = 1; va.pb(0); for(int i = 1; i < n; i++) { if(i == n-1 || n <= 226) { vector<int> vqr; vqr.pb(0); vqr.pb(i); if(use_machine(vqr) == 0) { va.pb(i); a[i] = 1; } else { vb.pb(i); a[i] = 1; } continue; } if(va.size() < 2 && vb.size() < 2) { vector<int> vqr; vqr.pb(0); vqr.pb(i); if(use_machine(vqr) == 0) { a[i] = 1; va.pb(i); } else { a[i] = 1; vb.pb(i); } } else if(va.size() >= 2) { vector<int> vqr; vqr.pb(i); vqr.pb(va[0]); vqr.pb(i+1); vqr.pb(va[1]); int qr = use_machine(vqr); qr = ((int) vqr.size()) -1 - qr; a[i] = 1; a[i+1] = 1; if(qr == 0) { vb.pb(i); vb.pb(i+1); } else if(qr == 1) { va.pb(i); vb.pb(i+1); } else if(qr == 2) { vb.pb(i); va.pb(i+1); } else { va.pb(i); va.pb(i+1); } i++; } else { vector<int> vqr; vqr.pb(i); vqr.pb(vb[0]); vqr.pb(i+1); vqr.pb(vb[1]); int qr = use_machine(vqr); qr = ((int) vqr.size()) -1 - qr; a[i] = 1; a[i+1] = 1; if(qr == 0) { va.pb(i); va.pb(i+1); } else if(qr == 1) { vb.pb(i); va.pb(i+1); } else if(qr == 2) { va.pb(i); vb.pb(i+1); } else { vb.pb(i); vb.pb(i+1); } i++; } if(va.size() >= B || vb.size() >= B) break; } int ans = va.size(); int i = 1; while(i < n) { while(i < n && a[i]) i++; if(va.size() > vb.size()) { int j = 0; vector<int> vqr; while(j < va.size() && i < n) { if(a[i] != 0) { i++; continue; } vqr.pb(va[j++]); vqr.pb(i++); } if(vqr.size() == 0) continue; int qr = use_machine(vqr); qr = ((int) vqr.size()) -1 - qr; ans+= qr/2; if(qr%2 == 1) { va.pb(vqr.back()); ans++; } else { vb.pb(vqr.back()); } } else { int j = 0; vector<int> vqr; while(j < vb.size() && i < n) { if(a[i] != 0) { i++; continue; } vqr.pb(vb[j++]); vqr.pb(i++); } if(vqr.size() == 0) continue; int qr = use_machine(vqr); qr = ((int) vqr.size()) -1 - qr; ans+= ((int) vqr.size())/2 - qr/2 - 1; if(qr%2 == 1) { vb.pb(vqr.back()); } else { va.pb(vqr.back()); ans++; } } } return ans; } // int32_t main() { // ios::sync_with_stdio(false); cin.tie(0); // freopen("in.in", "r", stdin); // // freopen("out.out", "w", stdout); // int n; // cin >> n; // for(int i = 0; i < n; i++) { // int x; cin >> x; // s[i] = x; // } // cout << count_mushrooms(n) << endl; // }

Compilation message (stderr)

mushrooms.cpp: In function 'int count_mushrooms(int)':
mushrooms.cpp:123:22: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  123 |         if(va.size() >= B || vb.size() >= B) break;
      |            ~~~~~~~~~~^~~~
mushrooms.cpp:123:40: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  123 |         if(va.size() >= B || vb.size() >= B) break;
      |                              ~~~~~~~~~~^~~~
mushrooms.cpp:134:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  134 |             while(j < va.size() && i < n) {
      |                   ~~^~~~~~~~~~~
mushrooms.cpp:159:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  159 |             while(j < vb.size() && i < n) {
      |                   ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...