Submission #1294801

#TimeUsernameProblemLanguageResultExecution timeMemory
1294801ChuanChenCounting Mushrooms (IOI20_mushrooms)C++20
56.78 / 100
4 ms496 KiB
#include "mushrooms.h"
#include<bits/stdc++.h>
using namespace std;

const unsigned int OPT = 100;

int ans;
vector<int> A, B;
queue<int> q;

int count_mushrooms(int n) {
	vector<int> m;
	A.push_back(0);
	for(int i = 1; i < n; i++){
		q.push(i);
	}

	while(q.size() && A.size() <= OPT && B.size() <= OPT){
		int c1 = q.front(); q.pop();
		// if(q.empty()){
			int verdic = use_machine({c1, A[0]});
			if(verdic == 0) A.push_back(c1);
			else B.push_back(c1);
			// break;
		// }
		//
		// int c2 = q.front(); q.pop();
		//
		// int verdic = use_machine({c1, A[0], c2});
		// if(verdic == 0){
		// 	A.push_back(c1);
		// 	A.push_back(c2);
		// }
		// else if(verdic == 2){
		// 	B.push_back(c1);
		// 	B.push_back(c2);
		// }
		// else{
		// 	int verdic2 = use_machine({A[0], c1});
		// 	if(verdic2 == 1){
		// 		A.push_back(c2);
		// 		B.push_back(c1);
		// 	}
		// 	else{
		// 		A.push_back(c1);
		// 		B.push_back(c2);
		// 	}
		// }
	}

	while(!q.empty()){
		if(A.size() < B.size()){ //use B
			vector<int> m(min(2*B.size()-1, 2*q.size()+1));
			for(int i = 0; i < (int)m.size(); i+=2) m[i] = B[i/2];
			for(int i = 1; i < (int)m.size(); i+=2){
				m[i] = q.front(); q.pop();
			}
			int verdic = use_machine(m);
			ans += verdic/2;
		}
		else{
			vector<int> m(min(2*A.size()-1, 2*q.size()+1));
			for(int i = 0; i < (int)m.size(); i+=2) m[i] = A[i/2];
			for(int i = 1; i < (int)m.size(); i+=2){
				m[i] = q.front(); q.pop();
			}
			int verdic = use_machine(m);
			ans += m.size()/2-verdic/2;
		}
	}

	return A.size()+ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...