Submission #1236294

#TimeUsernameProblemLanguageResultExecution timeMemory
1236294rxlfd314Rarest Insects (IOI22_insects)C++20
61.05 / 100
39 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) int min_cardinality(int N) { vt<int> A, B; move_inside(0); A.push_back(0); FOR(i, 1, N-1) { move_inside(i); if (press_button() == 1) { A.push_back(i); } else { move_outside(i); B.push_back(i); } } int ret = N; const auto dnc = [&](auto &&self, const vt<int> &Q, const vt<int> &R, bool in) -> void { if (size(Q) == 1) { ret = min(ret, size(R) + 1); return; } if (in) { FOR(i, size(Q)/2, size(Q)-1) move_outside(Q[i]); } else { FOR(i, size(Q)/2, size(Q)-1) move_inside(Q[i]); } vt<int> lft, rht; for (const auto &i : R) { move_inside(i); const int v = press_button(); (v > 1 && in || v == 1 && !in ? lft : rht).push_back(i); move_outside(i); } self(self, vt<int>(Q.begin(), Q.begin() + size(Q) / 2), lft, in); self(self, vt<int>(Q.begin() + size(Q) / 2, Q.end()), rht, !in); }; dnc(dnc, A, B, true); return ret; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...