Submission #1187579

#TimeUsernameProblemLanguageResultExecution timeMemory
1187579ByeWorldRarest Insects (IOI22_insects)C++20
0 / 100
7 ms440 KiB
#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;
vector<int>vec;

int min_cardinality(int N) {
	n = N; ANS = n;
	for(int i=0; i<n; i++){
		move_inside(i); vec.pb(i);
	}

	while(vec.size()){
		int val = press_button();
		chmn(ANS, val);
		int awal = vec.size(), same = 1; // awal segini

		// for(auto in : vec) cout << in << ' ';
		// 	cout << " awal\n";
		// cout << val << " val\n";
		while(true){
			int l = 0, r=vec.size()-1, mid = 0, cnt = -1;
			while(l<=r){
				mid = md;
				for(int i=0; i<=mid; i++) move_outside(vec[i]);
				if((vec.empty() ? 0 : press_button()) != val) r = mid-1; 
				// yg mau dikeluarin kena
				else l = mid+1, cnt = mid;

				for(int i=0; i<=mid; i++) move_inside(vec[i]);
			}
			move_outside(vec[cnt+1]); // yg dikeluarin = max cardinality
			vector<int>vec2;
			for(int i=0; i<vec.size(); i++){
				if(i == cnt+1) continue;
				vec2.pb(vec[i]);
			}
			swap(vec, vec2);

			// for(auto in : vec )cout << in << ' ';
			// 	cout << " newvec\n";
			if(press_button() == val) same++;
			else break;
		}
		if(val*same == awal) break; // card udh sama semua
	}
	return ANS;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...