제출 #628395

#제출 시각아이디문제언어결과실행 시간메모리
628395Gullesnuffs드문 곤충 (IOI22_insects)C++17
68.02 / 100
324 ms788 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = a; i < (b); ++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair<int, int> pii; struct Result { int num_added; int done_after; int num_tried; }; Result check(deque<int>& remaining, int old_h, int target_h, int num_different) { cerr << "Running with target_h = " << target_h << endl; Result res; res.num_added = 0; res.done_after = 0; res.num_tried = 0; int max_tried = sz(remaining); while (res.num_tried < max_tried) { int x = remaining.front(); cerr << "Checking " << x << endl; remaining.pop_front(); ++res.num_tried; move_inside(x); if (press_button() <= target_h) { cerr << "Accepted" << endl; ++res.num_added; res.done_after = res.num_tried; if (res.num_added == num_different * (target_h-old_h)) { break; } } else { cerr << "Rejected" << endl; remaining.push_back(x); move_outside(x); } } return res; } int min_cardinality(int N) { vector<int> v; rep(i,0,N) v.push_back(i); deque<int> remaining; for (int x : v) remaining.push_back(x); random_shuffle(all(remaining)); auto res = check(remaining, 0, 1, N); int num_different = res.num_added; int h = 1; while (true) { res = check(remaining, h, h+1, num_different); if (res.num_added < num_different) { return h; } h++; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...