제출 #627795

#제출 시각아이디문제언어결과실행 시간메모리
627795ETK드문 곤충 (IOI22_insects)C++17
99.89 / 100
74 ms2492 KiB
#include <bits/stdc++.h> #include "insects.h" #define rep(i,a,b) for(int i=(a);i<=(b);++i) #define per(i,a,b) for(int i=(a);i>=(b);--i) #define pii pair<int,int> #define vi vector<int> #define fi first #define se second #define pb push_back #define ALL(x) x.begin(),x.end() #define sz(x) int(x.size()) #define ll long long using namespace std; const int N = 2e5 + 5; //int n,a[N],b[N]; // void move_inside(int i){ // ++b[a[i]]; // } // void move_outside(int i){ // --b[a[i]]; // } // int press_button(){ // int mx = 0; // rep(i,1,n)mx = max(mx,b[i]); // return mx; // } int min_cardinality(int n){ int cnt = 0; vi vis(n,0); rep(i,0,n - 1){ move_inside(i); //appeared before if(i && press_button() > 1)move_outside(i); else vis[i] = 1,cnt++; } int tmp = cnt,L = 2,R = n / cnt,ans = 1; vi rem; while(L <= R){ int k = (L + R) >> 1; rep(i,0,n - 1){ if(vis[i])continue; move_inside(i); if(press_button() > k){ move_outside(i); rem.pb(i); } else tmp++; if(tmp == k * cnt){ rep(j,i + 1,n - 1)if(!vis[j]){ rem.pb(j); } } } if(k * cnt == tmp){ ans = k,L = k + 1; rep(i,0,n - 1)vis[i] = 1; for(int x : rem)vis[x] = 0; }else{ R = k - 1; for(int x : rem)vis[x] = 1; rep(i,0,n - 1)if(!vis[i]){ move_outside(i); tmp--; } } rem.clear(); } return ans; } // int main(){ // cin >> n; // rep(i,0,n - 1)cin >> a[i]; // cout << min_cardinality(n) << '\n'; // }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...