Submission #776655

#TimeUsernameProblemLanguageResultExecution timeMemory
776655SanguineChameleonRarest Insects (IOI22_insects)C++17
0 / 100
0 ms208 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; const int maxN = 2e3 + 20; int order[maxN]; int pref[maxN]; vector<int> diff; vector<int> cnt; mt19937 gen(69420); int res; void solve(int lt, int rt, vector<int> rem, bool on) { if (res == 1) { return; } if (lt == rt) { cnt[lt] += (int)rem.size(); res = min(res, cnt[lt]); return; } if (rem.empty()) { res = 1; return; } int mt = (lt + rt) / 2; bool all_left = true; for (auto x: rem) { all_left &= (pref[x] <= mt); } if (all_left) { solve(lt, mt, rem, on); return; } if (on) { for (int i = mt + 1; i <= rt; i++) { if (diff[i] == -1) { continue; } move_outside(diff[i]); } vector<int> left_rem; vector<int> right_rem; for (auto x: rem) { if (pref[x] <= mt) { left_rem.push_back(x); continue; } move_inside(x); if (press_button() == 2) { left_rem.push_back(x); } else { right_rem.push_back(x); } move_outside(x); } solve(lt, mt, left_rem, true); solve(mt + 1, rt, right_rem, false); } else { for (int i = mt + 1; i <= rt; i++) { if (diff[i] == -1) { continue; } move_inside(diff[i]); } vector<int> left_rem; vector<int> right_rem; for (auto x: rem) { if (pref[x] <= mt) { left_rem.push_back(x); continue; } move_inside(x); if (press_button() == 2) { right_rem.push_back(x); } else { left_rem.push_back(x); } move_outside(x); } solve(lt, mt, left_rem, false); solve(mt + 1, rt, right_rem, true); } } int min_cardinality(int N) { for (int i = 0; i < N; i++) { order[i] = i; } //reverse(order, order + N); shuffle(order, order + N, gen); diff.push_back(order[0]); move_inside(order[0]); vector<int> rem; for (int i = 1; i < N; i++) { move_inside(order[i]); if (press_button() == 1) { diff.push_back(order[i]); } else { pref[order[i]] = (int)diff.size() - 1; rem.push_back(order[i]); move_outside(order[i]); } } cnt.resize(diff.size(), 1); solve(0, (int)diff.size() - 1, rem, true); res = N + 1; return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...