답안 #1042591

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1042591 2024-08-03T08:09:52 Z Alihan_8 드문 곤충 (IOI22_insects) C++17
0 / 100
23 ms 596 KB
#include "insects.h"

#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define ar array
#define all(x) x.begin(), x.end()

template <class F, class S>
bool chmin(F &u, const S &v){
	bool flag = false;
	
	if ( u > v ){
		u = v; flag |= true;
	}
	
	return flag;
}

int min_cardinality(int n) {
	vector <int> p;
	
	for ( int i = 0; i < n; i++ ){
		move_inside(i);
		
		if ( press_button() == 1 ){
			p.pb(i);
		} else{
			move_outside(i);
		}
	}
	
	int k = (int)p.size();
	
	if ( __lg(n / k + 1) >= k ){ // random stuff
		vector <int> us(n);
		
		for ( auto &j: p ){
			move_outside(j);
		} p.clear();
		
		vector <int> f;
		
		while ( !*min_element(all(us)) ){
			int cnt = 0;
			
			for ( int i = 0; i < n; i++ ){
				if ( us[i] ) continue;
				
				move_inside(i);
				
				if ( press_button() == cnt + 1 ){
					cnt += 1; p.pb(i);
				} else{
					move_outside(i);
				}
			}
			
			f.pb(cnt);
			
			for ( auto &x: p ){
				us[x] = 1;
				
				move_outside(x);
			} p.clear();
		}
		
		return *min_element(all(f));
	}
	
	for ( auto &x: p ){
		move_outside(x);
	} p.clear();
	
	vector <int> us(n), tmp, rem;
	
	auto ok = [&](int m){
		int cnt = 0;
		
		tmp.clear();
		rem.clear();
		
		for ( int i = 0; i < n; i++ ){
			if ( us[i] ) continue;
			
			move_inside(i);
			
			if ( press_button() > m ){
				move_outside(i);
				
				rem.pb(i);
			} else{
				tmp.pb(i);
				cnt += 1;
			}
		}
		
		return cnt == k * m;
	};
	
	int l = 1, r = n / k + 1;
	
	while ( l + 1 < r ){
		int m = (l + r) / 2;
		
		if ( ok(m) ){
			for ( auto &x: tmp ){
				us[x] = 1;
			} l = m;
		}
		else{
			for ( auto &x: rem ){
				us[x] = 1;
			} 
			
			for ( auto &x: tmp ){
				move_outside(x);
			} 
			
			r = m;
		}
	}
	
	return l;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 596 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Correct 1 ms 344 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Incorrect 2 ms 428 KB Wrong answer.
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 596 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Correct 1 ms 344 KB Output is correct
7 Correct 1 ms 344 KB Output is correct
8 Incorrect 2 ms 428 KB Wrong answer.
9 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 0 ms 344 KB Output is correct
5 Correct 0 ms 344 KB Output is correct
6 Correct 0 ms 344 KB Output is correct
7 Correct 15 ms 452 KB Output is correct
8 Correct 12 ms 344 KB Output is correct
9 Incorrect 23 ms 596 KB Wrong answer.
10 Halted 0 ms 0 KB -