DMOJ · ampl2024sp3

Amplitude Hackathon Summer '24 Problem 3 - Mike's Unlocked Laptop

This C++ solution uses string processing for DMOJ ampl2024sp3 Amplitude Hackathon Summer '24 Problem 3 - Mike's Unlocked Laptop. Read the reasoning, inspect the code, or try your own test case below.

ampl2024sp3StringsString processingC++54 lines
Solution143of 248
Open official problem ↗ Download C++ file ↓ Search the library → Open full Code Lab ↗ Report an issue ↗

Approach

String processing

Mike's Unlocked Laptop interactive string-oracle protocol and longest-common-substring queries match.

Strings

Problem and code

Useful links.

Written by benbenyaojifen. Try the problem first, then compare your approach with the code.

Open official problem ↗View exact source file ↗
Implementation

Problem_3_Mike_s_Unlocked_Laptop.cpp

C++

    #include <bits/stdc++.h>
    using namespace std;
    using ll = long long;
    using i128 = __int128;
    const int inf = 1e9;
    const ll INF = 1e18; //❄️
    int main() {
        ios::sync_with_stdio(0); cin.tie(0); 
        string ans = "";
        vector<char> chars;
        for (int i = 'a'; i <= 'z'; i++) chars.push_back((char) i);
        for (int i = 'A'; i <= 'Z'; i++) chars.push_back((char) i);
        for (int i = 0; i <= 9; i++) chars.push_back(i + '0');
        auto qry = [&](const string &s) {
            cout << s << endl;
            int n; cin >> n;
            return n;
        };
        for (int i = 0; i < chars.size(); i++) {
            if (qry(chars[i] + "") == 1) {
                ans += chars[i];
                break;
            }
        }
        while (1) {
            string cur = ans;
            bool ok = 0;
            for (int i = 0; i < chars.size(); i++) {
                int res = qry(cur + chars[i]);
                if (res == -1) return 0;
                if (res == cur.size() + 1) {
                    ans += chars[i];
                    ok = 1;
                    break;
                }
            }
            if (!ok) break;
        }
        while (1) {
            string cur = ans;
            bool ok = 0;
            for (int i = 0; i < chars.size(); i++) {
                int res = qry(chars[i] + cur);
                if (res == -1) return 0;
                if (res == cur.size() + 1) {
                    ans = chars[i] + ans;
                    ok = 1;
                    break;
                }
            }
            if (!ok) break;
        }
        return 0;
    }
        

Did this explanation save you time? I'm a Grade 11 student building this free library to make difficult algorithms easier to understand.

Buy me a coffee ↗Keep studying →

Test this problem

Run your code here.

Paste your code, run a test case, compare the output, or trace selected values.

Full trace, comparison & stress testing ↗
StatusReady
Output
No run yet.
Diagnostics
No diagnostics yet.

Each run is isolated and has strict limits. Passing one test does not guarantee the judge will accept the solution.