제출 #1185981

#제출 시각아이디문제언어결과실행 시간메모리
1185981anmattroiRarest Insects (IOI22_insects)C++17
0 / 100
3 ms412 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); vector<int> p; int cnt; int pressButton() { return press_button(); } void moveInside(int i) { move_inside(p[i]); } void moveOutside(int i) { move_outside(p[i]); } int minCardinality(int N) { vector<int> candidates(N); iota(candidates.begin(), candidates.end(), 0); int coef = 0; int lo = 1, hi = N+1; while (hi - lo > 1) { // hi = min(hi, coef + int(candidates.size()) / cnt + 1); int mid = (lo + hi) >> 1; vector<int> inside, outside; for (int i : candidates) { moveInside(i); if (pressButton() > mid) { moveOutside(i); outside.emplace_back(i); } else inside.emplace_back(i); } if (int(inside.size()) == mid * cnt) { lo = mid; coef = mid; candidates = outside; } else { for (int i : inside) moveOutside(i); hi = mid; candidates = inside; } } return lo; } /* 4 2 2 2 3 */ int min_cardinality(int N) { p.assign(N, 0); iota(p.begin(), p.end(), 0); shuffle(p.begin(), p.end(), rng); vector<int> e; for (int i = 0; i < N; i++) { moveInside(i); e.emplace_back(i); if (pressButton() > 1) moveOutside(i); else ++cnt; } for (int i : e) moveOutside(i); if (cnt == 1) return N; if (cnt == N) return 1; return minCardinality(N); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...