Submission #715605

#TimeUsernameProblemLanguageResultExecution timeMemory
715605adrilenCombo (IOI18_combo)C++17
5 / 100
1 ms284 KiB
#include<bits/stdc++.h>
#include "combo.h"

using namespace std;
using ll = long long;
typedef pair<int, int> pii;



string guess_sequence(int n)
{
    string output;
    vector <char> letters = { 'A', 'B', 'X', 'Y' };

    

    // Find first

    int a, b;

    a = press(string(n, letters[0]) + string(n, letters[1]));

    if (a > 0)
    {
        // Means it starts with a or b
        b = press(string(n, letters[0]));

        if (b > 0) {
            output += string(a, letters[0]);
            letters.erase(letters.begin());
        } else {
            output += string(a, letters[1]);
            letters.erase(letters.begin() + 1);
        }
    } else {
        b = press(string(n, letters[2]));

        if (b > 0) 
        {
            output += string(b, letters[2]);
            letters.erase(letters.begin() + 2);
        } else {
            output += string(n, letters[3]);
            letters.erase(letters.begin() + 3);
        }
    }


    a = press(output + string(n, letters[0])), b = press(output + string(n, letters[1]));

    output.resize(min(a, b));
    // Can be improved by testing two first, then we now the length
    if (a > b)
    {
        output += string(a - b, letters[0]);
        letters.erase(letters.begin());
    } else if (b > a) {
        output += string(b - a, letters[1]);
        letters.erase(letters.begin() + 1);
    } else {
        output += string(press(output + string(n, letters[2])) - (int)output.size(), letters[2]);
        letters.erase(letters.begin() + 2);
    }

    a = press(output + string(n, letters[0]));

    if (a > (int)output.size())
    {
        output += string(a - (int)output.size(), letters[0]);
        letters.erase(letters.begin());
    } else {
        output += string(press(output + string(n, letters[1])) - output.size(), letters[1]);
        letters.erase(letters.begin() + 1);
    }

    if (output.size() != (size_t)n)
    {
        output += string(n - output.size(), letters[0]);
    }

    return output;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...