Submission #942179

#TimeUsernameProblemLanguageResultExecution timeMemory
942179benjaminkleynRarest Insects (IOI22_insects)C++17
0 / 100
33 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; int lo = 1, hi = N / cnt + 1, mid, ans = 1; while (lo < hi) { mid = (lo + hi + 1)/ 2; vector<int> new_insects; vector<int> bad_insects; for (int i = 0; i < N; i++) { 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; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...