이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "combo.h"
#include "bits/stdc++.h"
using namespace std;
/*
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
using ordered_set = tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>;
*/
#define all(x) begin(x), end(x)
#define sz(x) (int)x.size()
using ll = long long;
const int mod = 1e9+7;
/*
string S = "ABXYY";
int press(string s) {
int mx = 0;
for (int i = 0; i < sz(s); ++i) {
if (s[i] == S[0]) {
int j = i+1;
for (; s[j] == S[j-i] and j-i < sz(S) and j < sz(s); ++j){}
mx = max(mx, j-i);
}
}
return mx;
}
*/
string guess_sequence(int n) {
string ans = "", a = "A", b = "B", c = "X", d = "Y";
if (press("AB")) {
if (press("A")) {
ans += "A";
a = d;
} else {
ans += "B";
b = d;
}
} else {
if (press("X")) {
ans += "X";
c = d;
} else {
ans += "Y";
}
}
while (sz(ans) < n-1) {
int x = press(ans + a + a + ans + a + b + ans + b + a) - sz(ans);
if (x == 2) {
x = press(ans + a + a) - sz(ans);
if (x == 2) {
ans += a + a;
} else if (x == 1) {
ans += a + b;
} else {
ans += b + a;
}
} else if (x == 1) {
x = press(ans + b + b) - sz(ans);
if (x == 2) {
ans += b + b;
} else if (x == 1) {
ans += b + c;
} else {
ans += a + c;
}
} else {
ans += c;
}
}
if (sz(ans) != n) {
int x = press(ans + a + ans + b) - sz(ans);
if (x == 1) {
x = press(ans + a) - sz(ans);
if (x == 1) {
ans += a;
} else {
ans += b;
}
} else {
ans += c;
}
}
return ans;
}
/*
signed main() {
cout << guess_sequence(5) << '\n';
}
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |