Submission #478181

#TimeUsernameProblemLanguageResultExecution timeMemory
478181AlexandruabcdePassword (RMI18_password)C++14
100 / 100
417 ms652 KiB
#include <bits/stdc++.h>

using namespace std;

constexpr int NMAX = 5005;
constexpr int SMAX = 27;
typedef pair<int, string> PIS;

int query(string str);
int N, S;
int fr[SMAX];

string Complete (string a, int N, char ch) {
    string ans = a;
    for (int i = 1; i <= N-a.size(); ++ i )
        ans.push_back(ch);
    return ans;
}

string Merge (string a, string b) {
    int poz_a = 0, poz_b = 0;
    int need = b.size();
    string pref;
    pref.clear();

    while (poz_a < a.size() && poz_b < b.size()) {
        string aux = pref + a[poz_a];
        for (int i = poz_b; i < b.size(); ++ i )
            aux.push_back(b[i]);
        int val = query(aux);
        if (val == aux.size()) {
            pref.push_back(a[poz_a]);
            ++ poz_a;
        }
        else {
            pref.push_back(b[poz_b]);
            ++ poz_b;
        }
    }

    for (int i = poz_a; i < a.size(); ++ i )
        pref.push_back(a[i]);
    for (int i = poz_b; i < b.size(); ++ i )
        pref.push_back(b[i]);

    return pref;
}

int Frequency (char ch) {
    string a = Complete("", N, ch);

    return query(a);
}

string guess (int n, int s) {
    N = n, S = s;
    string ans;
    for (int i = 1; i <= S; ++ i ) {
        char ch = 'a' + i - 1;
        fr[i] = Frequency(ch);
    }

    set <PIS> H;

    for (int i = 1; i <= S; ++ i ) {
        if (fr[i] == 0) continue;

        string aux;
        aux = Complete(aux, fr[i], i + 'a' - 1);
        H.insert({fr[i], aux});
    }

    while (H.size() >= 2) {
        set <PIS> :: iterator it = H.begin();
        PIS first = *it;
        it = next(it);
        PIS second = *it;
        H.erase(first);
        H.erase(second);

        H.insert({first.first + second.first, Merge(first.second, second.second)});
    }

    set <PIS> :: iterator it = H.begin();
    PIS yes = *it;

    ans = yes.second;

    return ans;
}

Compilation message (stderr)

password.cpp: In function 'std::string Complete(std::string, int, char)':
password.cpp:15:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |     for (int i = 1; i <= N-a.size(); ++ i )
      |                     ~~^~~~~~~~~~~~~
password.cpp: In function 'std::string Merge(std::string, std::string)':
password.cpp:26:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     while (poz_a < a.size() && poz_b < b.size()) {
      |            ~~~~~~^~~~~~~~~~
password.cpp:26:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   26 |     while (poz_a < a.size() && poz_b < b.size()) {
      |                                ~~~~~~^~~~~~~~~~
password.cpp:28:31: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |         for (int i = poz_b; i < b.size(); ++ i )
      |                             ~~^~~~~~~~~~
password.cpp:31:17: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |         if (val == aux.size()) {
      |             ~~~~^~~~~~~~~~~~~
password.cpp:41:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for (int i = poz_a; i < a.size(); ++ i )
      |                         ~~^~~~~~~~~~
password.cpp:43:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for (int i = poz_b; i < b.size(); ++ i )
      |                         ~~^~~~~~~~~~
password.cpp:22:9: warning: unused variable 'need' [-Wunused-variable]
   22 |     int need = b.size();
      |         ^~~~
#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...