Submission #1292744

#TimeUsernameProblemLanguageResultExecution timeMemory
1292744julia_08Counting Mushrooms (IOI20_mushrooms)C++20
25 / 100
29 ms808 KiB
#include <bits/stdc++.h>
#include "mushrooms.h"

using namespace std;

int ask(vector<int> &v){
	if((int) v.size() < 2) return 0;
	return use_machine(v);
}

int count_mushrooms(int n){

	vector<int> cur;

	for(int i=1; i<n; i++) cur.push_back(i);

	vector<int> a = {0}, b;

	while((int) a.size() + (int) b.size() < (int) cur.size() + 2){

		int v = cur.back();
		cur.pop_back();

		vector<int> to_ask = {0, v};

		if(ask(to_ask) == 0){
			a.push_back(v);
		} else b.push_back(v);

	}

	int cnt = 0;

	vector<int> to_ask;

	int sz_a = (int) a.size();

	int sz = 0;

	while(!cur.empty() && a.size() > 1){

		to_ask.push_back(a.back());
		to_ask.push_back(cur.back());

		sz ++;

		a.pop_back();
		cur.pop_back();

	}

	if(!a.empty()){
		to_ask.push_back(a.back());
		a.pop_back();
	}

	int ans = ask(to_ask);

	cnt += sz_a + (sz - (ans / 2));

	sz = (int) cur.size();

	to_ask.clear();

	while(!cur.empty()){

		to_ask.push_back(b.back());
		to_ask.push_back(cur.back());

		b.pop_back();
		cur.pop_back();

	}

	if(!b.empty()){
		to_ask.push_back(b.back());
		b.pop_back();
	}

	ans = ask(to_ask);

	cnt += ans / 2;

	return cnt;

}
#Verdict Execution timeMemoryGrader output
Fetching results...