Submission #942194

#TimeUsernameProblemLanguageResultExecution timeMemory
942194benjaminkleynRarest Insects (IOI22_insects)C++17
100 / 100
27 ms1104 KiB
#include <bits/stdc++.h> #include "insects.h" using namespace std; int cnt; bool inside[2000]; bool bad[2000]; void init() { cnt = 0; memset(inside, false, sizeof(inside)); memset(bad, false, sizeof(bad)); } void move_in(int i) { if (inside[i]) return; cnt++; inside[i] = true; move_inside(i); } void move_out(int i) { if (!inside[i]) return; cnt--; inside[i] = false; move_outside(i); } int min_cardinality(int N) { init(); for (int i = 0; i < N; i++) { move_in(i); if (press_button() > 1) move_out(i); } int num_types = cnt; if (num_types == 1) return N; if (num_types == N) return 1; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> p(N); iota(p.begin(), p.end(), 0); int lo = 1, hi = N / cnt, mid, ans; while (lo <= hi) { mid = (lo + hi) / 2; shuffle(p.begin(), p.end(), rng); vector<int> new_insects; vector<int> bad_insects; for (int idx = 0; idx < N; idx++) { int i = p[idx]; if (!(bad[i] || inside[i])) { move_in(i); if (press_button() > mid) { bad_insects.push_back(i); move_out(i); } else new_insects.push_back(i); if (cnt >= mid * num_types) break; } } if (cnt == mid * num_types) ans = mid, lo = mid + 1; else { for (int i : bad_insects) bad[i] = true; for (int i : new_insects) move_out(i); hi = mid - 1; } } return ans; }

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:52:36: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
   52 |     int lo = 1, hi = N / cnt, mid, ans;
      |                                    ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...