제출 #1034831

#제출 시각아이디문제언어결과실행 시간메모리
1034831Mr_Husanboy드문 곤충 (IOI22_insects)C++17
99.89 / 100
45 ms704 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; #define ff first #define ss second #define all(a) (a).begin(), (a).end() #define ll long long const int mod = 1000002022; vector<int> state, p; int n, m; vector<vector<int>> g; template<typename T> int len(T &a){return a.size();} mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count()); void shuffle(vector<int> &a, int n){ if(n == 1) return; random_shuffle(a.begin(), a.begin() + n); for(int i = 0; i < n; i ++){ int aa = rng() % n, bb = rng() % n; while(bb == aa) bb = rng() % n; swap(a[aa], a[bb]); } } int min_cardinality(int n) { vector<int> v; vector<int> done(n); vector<int> ind(n); iota(all(ind), 0); shuffle(ind, n); for(int i = 0; i < n; i ++){ move_inside(ind[i]); if(press_button() == 2){ move_outside(ind[i]); }else v.push_back(ind[i]), done[ind[i]] = 1; } if(len(v) == 1){ return n; } int dis = len(v); int l = 1, r = n / dis + 1; ll cnt = dis; auto check = [&](int m)->bool{ vector<int> rem; vector<int> rem2; for(int i = 0; i < n; i ++){ if(done[ind[i]]) continue; move_inside(ind[i]); if(press_button() <= m){ rem.push_back(ind[i]); }else{ move_outside(ind[i]); rem2.push_back(ind[i]); } } if(cnt + len(rem) == dis * m){ for(auto u : rem) done[u] = 1; cnt += len(rem); return true; }else{ for(auto u : rem) move_outside(u); for(auto u : rem2) done[u] = 1; return false; } }; while(r - l > 1){ int m = (l + r) / 2; if(check(m)){ l = m; }else r = m; } return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...