| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 773279 | BT21tata | Password (RMI18_password) | C++17 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
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();
}
