#include "insects.h"
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define lf ((id<<1))
#define rg ((id<<1)|1)
#define md ((l+r)>>1)
using namespace std;
const int MAXN = 3e5+10;
const ll MOD = 1e9+2022;
ll sum(ll a, ll b){ return (a+b)%MOD;}
void chsum(ll &a, ll b){ a = (a+b)%MOD;}
ll mul(ll a, ll b){ return (a*b)%MOD; }
void chmul(ll &a, ll b){ a = (a*b)%MOD;}
void chmn(auto &a, auto b){ a = min(a, b); }
void chmx(auto &a, auto b){ a = max(a, b); }
int n, ANS;
int ty[MAXN];
vector <int> all, dif; // yg gk di dalem vec
vector<int>vec;
bool le = 0;
bool cek(int x){
if(le == 0){
for(int i=0; i<all.size(); i++){ // kalo ke kanan ambil ygdi luar
int v = all[i];
move_inside(v);
if(press_button() == x+1){
move_outside(v);
} else vec.pb(v); // vec < all
}
all.clear();
for(int i=0; i<n; i++) ty[i] = 0;
for(auto in : vec) ty[in] = 1;
for(int i=0; i<n; i++){
if(ty[i]) continue;
all.pb(i);
}
} else {
for(auto in : vec) move_outside(in);
vector<int> vec2;
for(int i=0; i<vec.size(); i++){ // kalo ke kanan ambil ygdi luar
int v = vec[i];
move_inside(v);
if(press_button() == x+1){
move_outside(v);
} else vec2.pb(v); // vec < all
}
swap(vec2, vec); // vec < vec2
for(int i=0; i<n; i++) ty[i] = 0;
for(auto in : vec2) ty[in] = 1;
for(auto in : vec) ty[in] = 2;
all.clear();
for(int i=0; i<n; i++){
if(ty[i]==1) // vec2 yg ga ada di vec
all.pb(i);
}
}
if(dif.size() * x == vec.size()) return 1; // waduh tot * x
return 0;
}
int min_cardinality(int N) {
n = N; ANS = n;
for(int i=0; i<n; i++){
move_inside(i);
if(press_button() == 1){
dif.pb(i);
}
else move_outside(i);
}
for(auto in : dif) move_outside(in);
for(int i=0; i<n; i++) all.pb(i);
int l=2, r=n, mid=0, cnt=1;
while(r-l>=4){
mid = (l+l+r)/3;
if(cek(mid)){
le = 0;
cnt = mid, l = mid+1;
} else {
le = 1; r = mid-1;
}
// cout << l << ' ' << r << ' ' << cnt << "cnt\n";
}
for(int i=l; i<=r; i++){
if(cek(i)){ le = 0; cnt = i; }
else break;
}
return cnt;
// for(int i=0; i<n; i++) vec.pb(i);
// while(!vec.empty()){
// for(auto in : vec) move_inside(in);
// int mx = press_button();
// chmn(ANS, mx);
// for(auto in : vec) move_outside(in);
// for(int i=0; i<n; i++) ty[i] = 0;
// vector<int> idx;
// for(auto in : vec){
// if(ty[in]) continue;
// move_outside(in);
// }
// for(auto in : idx) move_inside(in); // penting aj
// for(auto in : vec){
// if(ty[in]) continue;
// move_inside(in);
// if(press_button() == 2) ty[in] = 1; // max
// move_outside(in);
// }
// vector<int> vec2;
// for(auto in : vec){
// if(ty[in]) continue;
// vec2.pb(in);
// }
// swap(vec, vec2);
// }
// return ANS;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |