제출 #464135

#제출 시각아이디문제언어결과실행 시간메모리
464135MamedovPassword (RMI18_password)C++17
80 / 100
523 ms492 KiB
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define ll long long
#define ui unsigned int
#define pii pair<int, int>
#define piii pair<int, pii>
#define pb push_back
#define f first
#define s second
#define oo (1ll << 60)

using namespace std;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());


int query(string str);

string guess(int n, int s) {
    string str;
    vector<pii>countLetter(s);
    for(int i = 0; i < s; ++i) {
        str = "";
        for(int j = 0; j < n; ++j) {
            str += ('a' + i);
        }
        countLetter[i].f = query(str);
        countLetter[i].s = i;
    }
    sort(countLetter.begin(), countLetter.end());
    str = "";
    for(int i = 0; i < countLetter[0].f; ++i) {
        str += ('a' + countLetter[0].s);
    }
    for(int i = 1; i < s; ++i) {
        string add = "";
        for(int j = 0; j < countLetter[i].f; ++j) {
            add += ('a' + countLetter[i].s);
        }
        int len = str.length();
        vector<int>comesAfter(len + 2);
        comesAfter[0] = countLetter[i].f;
        comesAfter[len + 1] = 0;
        for(int j = 1; j <= len; ++j) {
            string ask = str.substr(0, j) + add;
            comesAfter[j] = query(ask) - j;
        }

        for(int j = 0; j <= len; ++j) {
            for(int k = comesAfter[j]; k > comesAfter[j + 1]; --k) {
                str.insert(str.begin() + j + countLetter[i].f - k, 'a' + countLetter[i].s);
            }
        }
    }
    return str;
}
#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...