Submission details
Task:Babaza Game
Sender:badr_masaaf
Submission time:2025-09-01 17:34:01 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.01 sdetails
#3ACCEPTED0.01 sdetails
#4ACCEPTED0.02 sdetails
#5ACCEPTED0.00 sdetails
#6ACCEPTED0.04 sdetails
#7ACCEPTED0.70 sdetails
#8ACCEPTED0.27 sdetails
#9ACCEPTED0.10 sdetails
#10ACCEPTED0.01 sdetails
#11ACCEPTED1.13 sdetails
#12ACCEPTED0.01 sdetails
#13ACCEPTED0.01 sdetails
#14ACCEPTED0.04 sdetails

Code

#include <bits/stdc++.h>


using namespace std;

bool isBabaza(const string &s) {
    for (int i = 1; i < (int)s.size(); i++) {
        if (s[i] == s[i-1]) return false;
    }
    return true;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string start, target;
    cin >> start >> target;
    int n = start.size();

    queue<string> q;
    unordered_map<string, string> parent;
    q.push(start);
    parent[start] = "";

    while (!q.empty()) {
        string cur = q.front(); q.pop();
        if (cur == target) break;

        vector<int> diff;
        for (int i=0;i<n;i++) if (cur[i]!=target[i]) diff.push_back(i);

        int dsz = diff.size();
        for (int mask=1; mask < (1<<dsz); mask++) {
            bool ok=true;
            for (int j=1;j<dsz;j++) {
                if ((mask&(1<<j)) && (mask&(1<<(j-1)))) {
                    if (diff[j]==diff[j-1]+1) { ok=false; break; }
                }
            }
            if (!ok) continue;
            string nxt=cur;
            for (int j=0;j<dsz;j++) if (mask&(1<<j)) nxt[diff[j]]=target[diff[j]];
            if (!isBabaza(nxt)) continue;
            if (!parent.count(nxt)) {
                parent[nxt]=cur;
                q.push(nxt);
            }
        }
        for (int pos=0;pos<n;pos++) if (cur[pos]!=target[pos]) {
            for (char c='A';c<='Z';c++) {
                if (c==cur[pos] || c==target[pos]) continue;
                string nxt=cur;
                nxt[pos]=c;
                if (!isBabaza(nxt)) continue;
                if (!parent.count(nxt)) {
                    parent[nxt]=cur;
                    q.push(nxt);
                }
            }
        }
    }
    vector<string> path;
    string cur=target;
    while (cur!="") {
        path.push_back(cur);
        cur=parent[cur];
    }
    reverse(path.begin(), path.end());

    for (auto &w : path) cout << w << "\n";
    return 0;
}

Test details

Test 1

Verdict: ACCEPTED

input
A
B

correct output
A
B

user output
A
B

Test 2

Verdict: ACCEPTED

input
BABAZA
BACBCB

correct output
BABAZA
BACACA
BACBCB

user output
BABAZA
BACACA
BACBCB

Test 3

Verdict: ACCEPTED

input
AB
BA

correct output
AB
CB
CA
BA

user output
AB
CB
CA
BA

Test 4

Verdict: ACCEPTED

input
ABC
BCD

correct output
ABC
DBD
DCD
BCD

user output
ABC
ABD
ACD
BCD

Test 5

Verdict: ACCEPTED

input
AXYB
CXYD

correct output
AXYB
CXYD

user output
AXYB
CXYD

Test 6

Verdict: ACCEPTED

input
LMIJLF
PAQBMH

correct output
LMIJLF
PMQJMF
PAQBMH

user output
LMIJLF
PMQJMF
PAQBMH

Test 7

Verdict: ACCEPTED

input
PNIWLSLIH
CRLVPUFHD

correct output
PNIWLSLIH
CNLWPSFID
CRLVPUFHD

user output
PNIWLSLIH
CNLWPSFID
CRLVPUFHD

Test 8

Verdict: ACCEPTED

input
ZDYIAVTKL
ZJKVXGAUM

correct output
ZDYIAVTKL
ZJYVAGTUL
ZJKVXGAUM

user output
ZDYIAVTKL
ZJYVAGTUL
ZJKVXGAUM

Test 9

Verdict: ACCEPTED

input
FBIXISJH
NXZIESMG

correct output
FBIXISJH
NBZXESMH
NXZIESMG

user output
FBIXISJH
NBZXESMH
NXZIESMG

Test 10

Verdict: ACCEPTED

input
OPGW
QJIE

correct output
OPGW
QPIW
QJIE

user output
OPGW
QPIW
QJIE

Test 11

Verdict: ACCEPTED

input
DUKNPKQZBL
NZPBMOEBIC

correct output
DUKNPKQZBL
NUPNMKEZIL
NZPBMOEBIC

user output
DUKNPKQZBL
NUPNMKEZIL
NZPBMOEBIC

Test 12

Verdict: ACCEPTED

input
ZWDTX
HZOXI

correct output
ZWDTX
HWOTI
HZOXI

user output
ZWDTX
HWOTI
HZOXI

Test 13

Verdict: ACCEPTED

input
URJF
ITIQ

correct output
URJF
IRIF
ITIQ

user output
URJF
IRIF
ITIQ

Test 14

Verdict: ACCEPTED

input
WYWBWU
IRYVBA

correct output
WYWBWU
WRWVWA
IRYVBA

user output
WYWBWU
WRWVWA
IRYVBA