#include <bits/stdc++.h>
#include "combo.h"
using namespace std;
// string S = "ABXYY";
// // z[i] = length of longest common prefix of s[0..N] and s[i..N]
// vector<int> zfunc(const string& s) {
// int n = (int)s.length();
// vector<int> z(n);
// z[0] = n;
// for (int i = 1, l = 0, r = 0; i < n; ++i) {
// if (i <= r)
// z[i] = min(r - i + 1, z[i - l]);
// while (i + z[i] < n && s[z[i]] == s[i + z[i]])
// ++z[i];
// if (i + z[i] - 1 > r)
// l = i, r = i + z[i] - 1;
// }
// return z;
// }
// int press(string p)
// {
// string s = S + "#" + p;
// vector<int> z = zfunc(s);
// return *max_element(z.begin() + (int)(S.size()), z.end());
// }
auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
mt19937_64 mt(seed);
long long get_random(long long l, long long r, bool non_zero = 0)
{
assert(l <= r);
long long res;
while (true)
{
res = mt() % (r - l + 1) + l;
if (non_zero && !res) continue;
break;
}
return res;
}
string guess_sequence(int N)
{
int asked = 0;
string chars = "ABXY";
string t = "";
for (int i = 0; i < 4; i++)
{
t += chars[i];
asked++;
if (press(t))
{
chars.erase(i, 1);
break;
}
t.pop_back();
}
vector<int> ord = {0, 1, 2};
for (int i = 2; i <= N; i++)
{
shuffle(ord.begin(), ord.end(), mt);
for (int j = 0; j < 3; j++)
{
t += chars[ord[j]];
asked++;
if (press(t) == i)
{
break;
}
t.pop_back();
}
}
//cout << "ASKED " << asked << '\n';
return t;
}
// int main()
// {
// cout << guess_sequence(S.size());
// return 0;
// }
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |