Submission #1024636

#TimeUsernameProblemLanguageResultExecution timeMemory
1024636Issa드문 곤충 (IOI22_insects)C++17
93.88 / 100
48 ms1096 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; pair<int, int> pii; const int maxn = 1e5 + 100; int n, d; int used[maxn]; int f[maxn]; int mx[maxn]; void move_inside(int i); void move_outside(int i); int press_button(); void add(int i){ used[i] = 1; move_inside(i); } void del(int i){ used[i] = 0; move_outside(i); } void clear(){ for(int i = 1; i <= n; i++){ if(used[i]) del(i); } } int min_cardinality(int N){ d = 0; n = N; for(int i = N - 1; i >= 0; i--){ add(i); if(press_button() == 1) f[i] = 1, d++; else del(i); } clear(); int ans = n / d, x = 0; for(int l = 1, r = n / d - 1; l <= r;){ int mid = (l + r) >> 1; if(x < mid){ for(int i = 0; i < n; i++){ if(used[i] || mx[i] > mid) continue; add(i); if(press_button() > mid){ mx[i] = mid + 1; del(i); } } } else if(x > mid){ for(int i = n - 1; i >= 0; i--){ if(!used[i]) continue; if(press_button() <= mid) break; del(i); } for(int i = 0; i < n; i++){ if(used[i] || mx[i] > mid) continue; add(i); if(press_button() > mid){ mx[i] = mid + 1; del(i); } } } x = mid; bool ok = 0; for(int i = 0; i < n; i++){ if(used[i] && f[i]) ok = 1; } if(!ok) l = mid + 1; else r = mid - 1, ans = mid; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...