Submission #1025323

#TimeUsernameProblemLanguageResultExecution timeMemory
1025323IssaRarest Insects (IOI22_insects)C++17
100 / 100
33 ms596 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; pair<int, int> pii; const int maxn = 1e5 + 100; int n, d, sz; int used[maxn]; int f[maxn]; int p[maxn]; void move_inside(int i); void move_outside(int i); int press_button(); void add(int i){ sz++; used[i] = 1; move_inside(i); } void del(int i){ sz--; used[i] = 0; move_outside(i); } void clear(){ for(int i = 1; i <= n; i++){ if(used[i]) del(i); } } bool ok(int k){ bool res = 0; for(int i = 0; i < n; i++){ if(used[p[i]]) continue; add(p[i]); if(press_button() > k){ del(p[i]); } else{ if(sz >= d * k){ res = 1; break; } } } if(res){ for(int i = 0; i < n; i++){ if(used[p[i]]) used[p[i]] = 2; } } else{ for(int i = 0; i < n; i++){ if(used[p[i]] == 1){ del(p[i]); } else if(used[p[i]] == 0){ used[p[i]] = 2; } } } return res; } int min_cardinality(int N){ d = 0; n = N; srand(time(0)); for(int i = 0; i < n; i++){ p[i] = i; } random_shuffle(p, p + n); for(int i = N - 1; i >= 0; i--){ add(p[i]); if(press_button() == 1) d++; else del(p[i]); } clear(); int ans = 1; for(int l = 2, r = n / d; l <= r;){ int mid = (l + r) >> 1; if(!ok(mid)) r = mid - 1; else l = mid + 1, ans = mid; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...