제출 #1170748

#제출 시각아이디문제언어결과실행 시간메모리
1170748thelegendary08드문 곤충 (IOI22_insects)C++17
0 / 100
40 ms428 KiB
#include "insects.h"
#include<bits/stdc++.h>
#define vi vector<int>
#define pb push_back
#define FOR(i, k, n) for(int i = k; i<n; i++)
#define f0r(i,n) for(int i = 0;  i< n; i++)
#define mp make_pair
#define pii pair<int,int>
#define vb vector<bool>
#define vout(x) for(auto u : x)cout<<u<<' '; cout<<'\n';
#define push(x); move_inside(x); v[x] = 1;
#define pull(x); move_outside(x); v[x] = 0;
using namespace std;
vector<bool>v;
vi rep;
int n;
int solve(int l, int r, int y){
	// cout<<y<<' '<<'y'<<'\n';
	// cout<<l<<' '<<r<<'\n';
	int mid = (l + r) / 2;
	vb cur(n);
	FOR(i, l, mid + 1){
		cur[rep[i]] = 1;
	}
	cur[y] = 1;
	f0r(i,n){
		if(v[i] && (!cur[i])){pull(i);}
		else if((!v[i]) && cur[i]){push(i);}
	}
	// vout(v);
	int x = press_button();
	if(x == 2){
		if(l == mid){
			return l;
		}
		else{
			return solve(l, mid, y);
		}
	}
	else{
		if(mid + 1 == r)return r;
		else{
			return solve(mid + 1, r, y);
		}
	}
}
int min_cardinality(int n) {
	::n = n;
	v.resize(n);
	vi col(n, -1);
	int cur = 1;
	col[0] = 0;
	rep.resize(n);
	f0r(i,n) rep[i] = 0;
	rep[0] = 0;
	FOR(ii, 1, n){
		vb cura(n);
		FOR(i, 0, cur){
			cura[rep[i]] = 1;
		}
		cura[ii] = 1;
		f0r(i,n){
			if(v[i] && (!cura[i])){pull(i);}
			else if((!v[i]) && cura[i]){push(i);}
		}
		int x = press_button();
		if(x == 1){
			col[ii] = cur;
			rep[ii] = cur;
			cur++;
		}
		else{
			// cout<<ii<<' '<<"ii"<<'\n';
			int nc = solve(0, cur - 1, ii);
			col[ii] = nc;
		}
		
		
	}
	// vout(col);
	vi cnt(cur + 1);
	f0r(i, n)cnt[col[i]]++;
	int ans = 1e9;
	f0r(i, cur){
		ans = min(ans, cnt[i]);
	}
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...