# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
773280 | BT21tata | Password (RMI18_password) | C++17 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
struct cmp
{
bool operator()(const string &a, const string &b)
{
return a.size()>b.size();
}
};
string mrg(string &a, string &b)
{
string ret;
int pos1=0, pos2=0;
while(true)
{
if(pos1==a.size() or pos2==b.size()) break;
string cur=ret;
cur+=a[pos1];
for(int i=pos2; i<b.size(); i++)
cur+=b[i];
int q=query(cur);
if(q==pos1+b.size()+1)
ret+=a[pos1++];
else ret+=b[pos2++];
}
while(pos1<a.size()) ret+=a[pos1++];
while(pos2<b.size()) ret+=b[pos2++];
return ret;
}
string guess(int n, int s)
{
priority_queue<string, vector<string>, cmp>q;
for(int i=0; i<s; i++)
{
string s, sec;
for(int j=0; j<n; j++)
s+=(char)(i+'a');
int ret=query(s);
if(!ret) continue;
for(int i=0; i<ret; i++)
sec+=(char)(i+'a');
q.push(sec);
}
while(q.size()>1)
{
string s1=q.top(); q.pop();
string s2=q.top(); q.pop();
string merged=mrg(s1, s2);
q.push(merged);
}
return q.top();
}