Submission #1119122

# Submission time Handle Problem Language Result Execution time Memory
1119122 2024-11-26T16:11:21 Z somefolk Password (RMI18_password) C++17
30 / 100
75 ms 880 KB
#include <iostream>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <unordered_set>
#include <complex>
#include <list>
#include <chrono>
#include <random>
#include <stack>
#include <iomanip>
#include <fstream>
#include <cassert>
using namespace std;
 
#define endl "\n"
// #define int long long
 
const int INF = 2 * 1e5 + 5;
const int MOD = 1e9 + 7;
 
// int query(string s){
//     int n;
//     cout << s;
//     cin >> n;
//     return n;
// }
 
int query(string s);
 
string guess(int n, int s){
    vector<char> a;
    unordered_map<char, int> mp;
    unordered_map<char, char> adj;
    for(char i = 'a'; i < 'a'+s; i++){
        int amount = query(string(n, i));
        if(amount != 0){
            a.push_back(i);
            mp[i] = amount;
        }
    }
 
    string sol = "";
    for(int i = 0; i < n; i++){
        // randomize:
        random_device rd;
        mt19937 g(rd());
        shuffle(a.begin(), a.end(), g);
 
        // for(auto &i : a){
        //     cout << i << " ";
        // }
        // cout << endl;
 
        // get edeges between letters:
        if(i == 0 || a.size() > 1){
            char prev = a[0];
            for(auto &j : a){
                if(prev == j) continue;
                if(query(sol + j + string(mp[prev], prev)) == sol.size() +  mp[prev] + 1){
                    adj[prev] = j;
                    prev = j;
                } else {
                    adj[j] = prev;
                }
            }
        }
 
        // for(auto &i : adj){
        //     cout << i.second << "<-" << i.first << endl;
        // }
 
        // dfs for last
        char end = a[0];
        while(true){
            if(adj.count(end) == 0) break;
            end = adj[end];
        }
 
        sol+=end;
        mp[end]--;
 
        // cout << end << endl;
 
        // erase last and all edges to last
        vector<char> dis;
        if(mp[end]) dis.push_back(end);
        for(auto it = adj.begin(); it != adj.end();){
            if(it->second == end){
                dis.push_back(it->first);
                it = adj.erase(it);
            } else {
                it++;
            }
        }
 
        // cout << endl;
 
        // for(auto &i : adj){
        //     cout << i.second << "<-" << i.first << endl;
        // }
 
        a.clear();
        a = dis;
    }
 
    return sol;
}

Compilation message

password.cpp: In function 'std::string guess(int, int)':
password.cpp:65:60: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   65 |                 if(query(sol + j + string(mp[prev], prev)) == sol.size() +  mp[prev] + 1){
      |                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 360 KB Guessed the password with 77 queries.
2 Correct 3 ms 880 KB Guessed the password with 132 queries.
# Verdict Execution time Memory Grader output
1 Correct 3 ms 348 KB Guessed the password with 48 queries.
2 Correct 4 ms 348 KB Guessed the password with 107 queries.
3 Correct 5 ms 468 KB Guessed the password with 92 queries.
4 Correct 8 ms 340 KB Guessed the password with 203 queries.
# Verdict Execution time Memory Grader output
1 Correct 65 ms 716 KB Guessed the password with 3694 queries.
2 Runtime error 75 ms 736 KB Execution killed with signal 13
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 360 KB Guessed the password with 77 queries.
2 Correct 3 ms 880 KB Guessed the password with 132 queries.
3 Correct 3 ms 348 KB Guessed the password with 48 queries.
4 Correct 4 ms 348 KB Guessed the password with 107 queries.
5 Correct 5 ms 468 KB Guessed the password with 92 queries.
6 Correct 8 ms 340 KB Guessed the password with 203 queries.
7 Correct 65 ms 716 KB Guessed the password with 3694 queries.
8 Runtime error 75 ms 736 KB Execution killed with signal 13
9 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 360 KB Guessed the password with 77 queries.
2 Correct 3 ms 880 KB Guessed the password with 132 queries.
3 Correct 3 ms 348 KB Guessed the password with 48 queries.
4 Correct 4 ms 348 KB Guessed the password with 107 queries.
5 Correct 5 ms 468 KB Guessed the password with 92 queries.
6 Correct 8 ms 340 KB Guessed the password with 203 queries.
7 Correct 65 ms 716 KB Guessed the password with 3694 queries.
8 Runtime error 75 ms 736 KB Execution killed with signal 13
9 Halted 0 ms 0 KB -