#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
#define fi first
#define se second
#define vi vector<int>
#define vll vector<long long>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
mt19937_64 rng64(chrono::high_resolution_clock::now().time_since_epoch().count());
inline int rand(int l,int r){return uniform_int_distribution<int>(l, r)(rng);}
inline ll rand(ll l,ll r){return uniform_int_distribution<ll>(l, r)(rng64);}
#ifdef DEBUG
auto&operator<<(auto&o,pair<auto,auto>p){return o<<"("<<p.first<<", "<<p.second<<")";}
auto operator<<(auto&o,auto x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<","+!i++<<e;return o<<"}";}
#define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<endl;}(X)
#else
#define debug(...){}
#endif
struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
struct pair_hash{
size_t operator()(const pair<int,int>&x)const{
return hash<long long>()(((long long)x.first)^(((long long)x.second)<<32));
}
};
int query(string str);
string guess(int n, int S);
int Cnt[300];
int N;
string mergeSort(vector<string> vec){
// cerr << "=====\n";
// for(auto ele : vec){
// cerr << ele << ' ';
// }
// cerr << '\n';
if(sz(vec) == 0){
return "";
}
if(sz(vec) == 1){
return vec[0];
}
int mid = (sz(vec) - 1) / 2;
vector<string> a = {};
vector<string> b = {};
for(int i = 0; i < sz(vec); i++){
if(i <= mid){
a.pb(vec[i]);
}else{
b.pb(vec[i]);
}
}
string A = mergeSort(a);
string B = mergeSort(b);
string res = "";
//cerr << "MERGING: " << A << ' ' << B << '\n';
int wsk1 = 0;
int wsk2 = 0;
while(wsk1 < sz(A) || wsk2 < sz(B)){
if(wsk1 == sz(A)){
res.pb(B[wsk2++]);
}else if(wsk2 == sz(B)){
res.pb(A[wsk1++]);
}else{
string now = res;
now.pb(A[wsk1]);
for(int j = wsk2; j < sz(B); j++){
now.pb(B[j]);
}
if(query(now) == sz(now)){
res.pb(A[wsk1++]);
}else{
res.pb(B[wsk2++]);
}
}
}
return res;
}
string guess(int n, int S){
vector<string> vec = {};
N = n;
string A = "abcdefghijklmnopqrstuvwxyz";
for(int i = 0; i < S; i++){
string add = "";
for(int j = 1; j <= n; j++){
add.pb(A[i]);
}
int r = query(add);
string now = "";
for(int j = 1; j <= r; j++){
now.pb(A[i]);
}
if(sz(now)){
vec.pb(now);
}
}
//for(auto ele : vec){
// cerr << ele << '\n';
// }
return mergeSort(vec);
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |