제출 #1188694

#제출 시각아이디문제언어결과실행 시간메모리
1188694hyakup버섯 세기 (IOI20_mushrooms)C++20
52.56 / 100
3 ms512 KiB
#include "mushrooms.h"
#include <bits/stdc++.h>
using namespace std;

#define vi vector<int>

int count_mushrooms( int n ){
	mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

	vector<int> ordem(n);
	iota( ordem.begin(), ordem.end(), 0 );

	shuffle( ordem.begin() + 1, ordem.end(), rng );

	const int k = 150;

	vi a, b;
	a.push_back(0);
	int l = 1;
	while( a.size() < k && b.size() < k && l < n ){
		vi v = { 0, ordem[l] };
		if( use_machine(v) == 1 ) b.push_back(ordem[l]);
		else a.push_back(ordem[l]);
		l++;
	}

	int cont = 0;

	bool invert = (a.size() == k);
	vi v = (( invert ) ? a : b );

	while( l < n ){
		int r = min(l + k, n);
		vi aux;
		for( int i = 0; i < k; i++ ){
			aux.push_back(v[i]);
			if( l + i < r ) aux.push_back(ordem[l + i]);
		}

		int query = (use_machine(aux) + 1)/2;

		cont += (( invert ) ? (r - l) - query : query );
		l = r;
	}

	return a.size() + cont;
}
#Verdict Execution timeMemoryGrader output
Fetching results...