| # | Time | Username | Problem | Language | Result | Execution time | Memory | 
|---|---|---|---|---|---|---|---|
| 1117344 | Unconcurrent | Password (RMI18_password) | C++17 | 8 ms | 592 KiB | 
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// (C) Sologub Radu
#include <iostream>
#include <cmath>
#include <vector>
#include <fstream>
#include <algorithm>
#include <iomanip> // for std::setw and std::setfill
#include <map>
#include <chrono>
using namespace std;
const bool fileInput = false;
istream& input = *(fileInput ? new fstream("./input.in") : &cin);
// https://rmi.lbi.ro/rmi_2018/aj password
// Mock password for testing purposes
string actualPassword = "aaa";
int longestPrefixSubsequenceLength(const std::string& input1, const std::string& input2) {
    int len1 = input1.length();
    int len2 = input2.length();
    // Two pointers to keep track of the characters in both strings
    int i = 0; // Pointer for input1 (prefix)
    int j = 0; // Pointer for input2 (source for subsequence)
    // Iterate over the characters in both strings
    while (i < len1 && j < len2) {
        // If the characters match, move the pointer in input1
        if (input1[i] == input2[j]) {
            i++;
        }
        // Always move the pointer in input2
        j++;
    }
    // The value of i gives us the length of the longest prefix
    return i;
}
int query( string str) ;
string guess(int len, int alphabet){
    string guess = "a";
    // first char guess
    while(query(guess) != 1){
        guess[0]++;
    }
    forward_looking:
    // forward looking
    char forwardGuess = 'a';
    while(query(guess + forwardGuess) < guess.size() + 1 && forwardGuess < 'a' + alphabet){
        forwardGuess++;
    }
    if(forwardGuess >= 'a' + alphabet){
        // failed forward look, skip;
    }else{
        // success
        guess = guess + forwardGuess;
        // cout << guess << endl;
        goto forward_looking;
    }
    int backInsertIndex = guess.size() - 1;
    back_inserter:
    if(guess.size() == len){
        return guess;
    }
    
    string backGuess = "a";
    backGuess[0]--;
    
    string guessTry;
    do{
        guessTry = guess;
        backGuess[0]++;
        guessTry.insert(backInsertIndex, backGuess);
        // cout << "guessTry = " << guessTry << endl;
    }while(backGuess[0] < 'a' + alphabet
        && query(guessTry) < guess.size() + 1);
    
    if(backGuess[0] >= 'a' + alphabet){
        // failed back insert at index;
        backInsertIndex --;
        if(backInsertIndex < 0){
            backInsertIndex = guess.size() - 1;
        }
    }else{
        // success
        // backInsertIndex --;
        guess = guess.insert(backInsertIndex, backGuess);
        // cout << guess << endl;
    }
    goto back_inserter;
}
Compilation message (stderr)
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output | 
|---|---|---|---|---|
| Fetching results... | ||||
