Submission #1338549

#TimeUsernameProblemLanguageResultExecution timeMemory
1338549aaaaaaaaPassword (RMI18_password)C++20
100 / 100
156 ms552 KiB
#include <bits/stdc++.h>
using namespace std;

int query(string str);

string guess(int n, int s) {
    vector<string> all;
    for(int i = 0; i < s; ++i){
        string cur(n, i + 'a');
        int len = query(cur);
        if(len) all.push_back(string(len, i + 'a'));
    }
    auto solve = [&](auto &self, vector<string> cur) -> string {
        if((int) cur.size() == 0) return "";
        if((int) cur.size() == 1) return cur[0];
        int mid = (int) cur.size() / 2;
        vector<string> left, right;
        for(int i = 0; i < mid; ++i) left.push_back(cur[i]);
        for(int i = mid; i < (int) cur.size(); ++i) right.push_back(cur[i]);
        string X = self(self, left), Y = self(self, right);
        if((int) X.size() == 0) return Y;
        if((int) Y.size() == 0) return X;
        string res = X;
        int where = 0;
        for(auto v : Y){
            while(1) {
                string working = "";
                for(int j = 0; j < (int) res.size(); ++j){
                    if(j == where) working.push_back(v);
                    working.push_back(res[j]);
                }
                if(where == (int) res.size()) working.push_back(v);
                where += 1;
                if(query(working) == (int) working.size()){
                    res = working;
                    break;
                }
            }
        }
        //cout << "combining: " << X << " with " << Y << " after combining: " << res << "\n";
        return res;
    };
    return solve(solve, all);
}
#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...