제출 #1019978

#제출 시각아이디문제언어결과실행 시간메모리
1019978CodeAssignment콤보 (IOI18_combo)C++17
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
#include "combo.h"
using namespace std;

#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define trav(a, x) for (auto &a : x)
#define pb push_back
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());

string guess_sequence(int N) {
	ll n = N;
	vector<char> l = {'A', 'B', 'X', 'Y'};

	int coin;
	auto query = [&](string q) -> void {
		coin = press(q);
	};

	string st = "Y";
	string s = st;
	rep(i, 0, sz(l) - 1) {
		query(string(n, l[i]));
		if (coin > 0) {
			s = "";
			s += l[i];
			break;
		}
	}
	
	vector<char> chars;
	trav(c, l) if (c != s[0]) chars.pb(c);

	rep(i, 0, n-1) {
		shuffle(all(chars), rnd);
		bool found = 0;
		rep(j, 0, sz(chars) - 1) {
			string temp = s;
			temp += chars[0];
			while(sz(temp) < n) temp += st;
			query(temp);
			if (coin == sz(s) + 1) {
				s += chars[0];
				found = 1;
				continue;
			}
		}
		if (!found) s += chars[1];
	}
	return s;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...