Submission #1146599

#TimeUsernameProblemLanguageResultExecution timeMemory
1146599KickingKunCombo (IOI18_combo)C++20
100 / 100
7 ms592 KiB
// PHK
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define ld long double
#define bigint __int128
#define emb emplace_back
#define pb push_back
#define pii pair <int, int>
#define fi first
#define se second
#define all(v) v.begin(), v.end()
#define Task ""

#define MASK(k) (1ull << k)
#define bitcnt(k) __builtin_popcount(k)
#define testBit(n, k) ((n >> k) & 1)
#define flipBit(n, k) (n ^ (1ll << k))
#define offBit(n, k) (n & ~MASK(k))
#define onBit(n, k) (n | (1ll << k))

template <class T> bool minimize(T &a, T b) {if (a > b) {a = b; return true;} return false;}
template <class T> bool maximize(T &a, T b) {if (a < b) {a = b; return true;} return false;}

const int N = 2e5 + 5, lim = 60, mod = 1e9 + 7;
const ll INF = 1e18;

int press(string p);

string guess_sequence(int n) {
	string res;
	int a = press("AB");
	if (a > 0) {
		if (press("A")) res = "A";
		else res = "B";
	}
	else {
		if (press("X")) res = "X";
		else res = "Y";
	} // 2
	
	vector <char> other;
	for (char c: "ABXY")
		if (c != res[0]) other.emplace_back(c);
	char b = other[0], x = other[1], y = other[2];
	
	for (int i = 2; i < n; i++) { // n - 2
		string bb = res + b + b, bx = res + b + x, xb = res + x + b;
		string ask = bb + bx + xb; int len = press(ask);
		if (len - (i - 1) == 0) {
			res += y;
		}
		else if (len - (i - 1) == 1) {
			// by, xx, xy -> hoi xx -> 0 la by, 2 la xx, 1 la xy
			ask = res + x + x; len = press(ask);
			if (len - (i - 1) == 0) res += b, res += y;
			else if (len - (i - 1) == 1) res += x, res += y;
			else res += x, res += x;
			++i;
		}
		else {
			// bb, bx, xb -> hoi bb ->
			ask = res + b + b; len = press(ask);
			if (len - (i - 1) == 0) res += x, res += b;
			else if (len - (i - 1) == 1) res += b, res += x;
			else res += b, res += b;
			++i;
		}
	}
	
	if (res.size() < n) { // 2
		if (press(res + b) == n) res += b;
		else {
			if (press(res + x) == n) res += x;
			else res += y;
		}
	}
	return res;
}

//	hoi bb bx xb:
//	bb bx by xb xx xy yb yx yy
//	2  2  1  2  1  1  0  0  0

#ifdef cute
int press(string p) {
	cerr << p << endl;
	int x; cin >> x;
	return x;
}

int main() {
	cout << guess_sequence(3);
}
#endif
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...