Submission #1144471

#TimeUsernameProblemLanguageResultExecution timeMemory
1144471crispxxCombo (IOI18_combo)C++20
100 / 100
8 ms508 KiB
#include <bits/stdc++.h>
#include "combo.h"

// #include "grader.cpp"

using namespace std;

#define all(x) x.begin(), x.end()
#define nl '\n'

const int M = 4;

char let[M] = {'A', 'B', 'X', 'Y'};

int guess_one(string s) {
	int len = press(s + let[0] + s + let[1]);
	int idx = 2 * (len < (int)s.size() + 1);
	len = press(s + let[idx]);
	idx += (len < (int)s.size() + 1);
	return idx;
}

string guess_sequence(int N) {
	int idx[M];
	for(int i = 0; i < M; i++) idx[i] = i;
	string s;
	{
		int id = guess_one(s);
		s += let[id];
		swap(idx[id], idx[M - 1]);
	}
	
	for(int i = 0; i < N - 2; i++) {
		string z;
		for(int j = 0; j < M - 1; j++) {
			z += s + let[idx[0]] + let[idx[j]];
		}
		z += s + let[idx[1]];
		int len = press(z);
		
		if(len == i + 1) {
			s += let[idx[2]];
		} else if(len == i + 2) {
			s += let[idx[1]];
		} else {
			s += let[idx[0]];
		}
	}
	
	if(N > 1) {
		int id = guess_one(s);
		s += let[id];
	}
	
	return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...