Submission #1241239

#TimeUsernameProblemLanguageResultExecution timeMemory
1241239HanksburgerPassword (RMI18_password)C++20
0 / 100
12 ms416 KiB
#include <bits/stdc++.h>
using namespace std;
int query(string q);
string guess(int N, int S)
{
    vector<pair<int, int> > vec;
    int freq[26];
    for (int i=0; i<S; i++)
    {
        string tmp;
        for (int j=0; j<N; j++)
            tmp.push_back('a'+i);
        freq[i]=query(tmp);
        vec.push_back({freq[i], i});
    }
    sort(vec.begin(), vec.end(), greater<pair<int, int> >());
    string cur;
    for (int j=0; j<vec[0].first; j++)
        cur.push_back('a'+vec[0].second);
    for (int i=1; i<vec.size(); i++)
    {
        for (int j=1; j<=vec[i].first; j++)
        {
            string tmp;
            for (int k=0; k<j; k++)
                tmp.push_back('a'+vec[i].second);
            for (int k=j; k<N; k++)
                tmp.push_back('a'+vec[0].second);
            int res=vec[0].first-(query(tmp)-j), cnt=0, l, r=cur.length();
            for (int k=0; k<=cur.length(); k++)
            {
                if (cnt==res)
                {
                    l=k;
                    break;
                }
                if (cur[k]=='a'+vec[0].second)
                    cnt++;
            }
            cnt=0;
            for (int k=0; k<cur.length(); k++)
            {
                if (cur[k]=='a'+vec[0].second)
                    cnt++;
                if (cnt==res+1)
                {
                    r=k;
                    break;
                }
            }
            while (l<r)
            {
                int mid=(l+r)/2;
                tmp.clear();
                for (int k=0; k<j; k++)
                    tmp.push_back('a'+vec[i].second);
                for (int k=j; k<N; k++)
                    tmp.push_back(cur[mid]);
                res=freq[cur[mid]-'a']-(query(tmp)-j), cnt=0;
                for (int k=0; k<=mid; k++)
                    if (cur[k]==cur[mid])
                        cnt++;
                if (res>=cnt)
                    l=mid+1;
                else
                    r=mid;
            }
            cur.insert(cur.begin()+l, 'a'+vec[i].second);
        }
    }
    return cur;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...