제출 #1237174

#제출 시각아이디문제언어결과실행 시간메모리
1237174rxlfd314드문 곤충 (IOI22_insects)C++20
100 / 100
14 ms464 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ari2 = array<int, 2>; using ari3 = array<int, 3>; using arl2 = array<ll, 2>; using arl3 = array<ll, 3>; template <class T> using vt = vector<T>; #define all(x) begin(x), end(x) #define size(x) (int((x).size())) #define REP(a,b,c,d) for(int a=(b);(d)>0?a<=(c):a>=(c);a+=(d)) #define FOR(a,b,c) REP(a,b,c,1) #define ROF(a,b,c) REP(a,b,c,-1) mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int min_cardinality(int N) { vt<int> A, B; FOR(i, 0, N-1) { move_inside(i); if (!size(A) || press_button() == 1) { A.push_back(i); } else { move_outside(i); B.push_back(i); } } int cur = size(A), cnt = size(A); int lo = 1, hi = N / size(A); while (lo < hi) { const int mid = lo + hi + 1 >> 1; shuffle(all(B), rng); set<int> C; for (const auto &i : B) { if (cnt == mid * size(A)) break; move_inside(i); if (cur + size(C) + 1 <= mid || press_button() <= mid) C.insert(i), cnt++; else move_outside(i); } if (cnt == mid * size(A)) { cur = lo = mid; vt<int> new_b; if (lo < hi) for (const auto &i : B) if (!C.count(i)) new_b.push_back(i); B = new_b; } else { hi = mid - 1; cnt -= size(C); if (lo < hi) for (const auto &i : C) move_outside(i); B = vt<int>(all(C)); } } return lo; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...