Submission #1187580

#TimeUsernameProblemLanguageResultExecution timeMemory
1187580ByeWorldRarest Insects (IOI22_insects)C++20
10 / 100
7 ms436 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;
			int pos = 0;
			while(l<=r){
				mid = md; // di dalem mid+1 - vec.size()-1

				while(pos < mid+1){
					move_outside(vec[pos]); pos++;
				}
				while(pos > mid+1){
					pos--; move_inside(vec[pos]);
				}
				if((vec.empty() ? 0 : press_button()) != val) r = mid-1; 
				// yg mau dikeluarin kena
				else l = mid+1, cnt = mid;

			}
			while(pos > 0){
				pos--; move_inside(vec[pos]);
			}
			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...