제출 #623124

#제출 시각아이디문제언어결과실행 시간메모리
623124l_reho콤보 (IOI18_combo)C++14
30 / 100
49 ms488 KiB
#include "combo.h"

#include<bits/stdc++.h>
using namespace std;

int press(std::string p);
std::string guess_sequence(int N) {
  
	// guess del primo carattere
	string guess = "A";
	vector<string> voc{"A", "B", "X", "Y"};
	// AABB se ritorna > 0 allora scarto le altre due
	
	string try1 = "AABB";
	
	int ret = press(try1);
	if(ret > 0){
		ret = press("A");
		if(ret == 1) guess = "A";
		else guess="B";
		
	}else{
		ret = press("X");
		if(ret == 1) guess = "X";
		else guess="Y";
	}
	

	
	voc.erase(find(voc.begin(), voc.end(), guess));
	
	
	for(int i = 1; i < N; i++){
		// YXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXBBBBBABABBABABBABABAAXXXXXXXXXXXXXXX
		int low = 0;
		int high = 3;
		string v = "";
		while(low < high){
			int mid = low + (high-low)/2;
			
			string left = "";
			
			for(int j = low; j <= mid; j++)
				left += guess + voc[j];
			
			
			if(press(left) == (int)guess.length()+1){
				v = voc[mid];
				
				high = mid;
			}else{
				low = mid+1;
			}
			
		}
		
		guess += v;
		
		/*
		for(int j = 0; j < 4; j++){
			if(voc[j][0] == guess[0]) continue;
			int ret = press(guess + voc[j]);	
			
			if(ret == (int)guess.length()+1){
				guess += voc[j];
				break;
			}
			
		}
		*/
		
	}
	
	return guess;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...