| Task: | Babaza Game |
| Sender: | aalto26am_046 |
| Submission time: | 2026-09-02 14:51:42 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.00 s | details |
| #3 | ACCEPTED | 0.00 s | details |
| #4 | ACCEPTED | 0.00 s | details |
| #5 | ACCEPTED | 0.00 s | details |
| #6 | ACCEPTED | 0.00 s | details |
| #7 | ACCEPTED | 0.00 s | details |
| #8 | ACCEPTED | 0.00 s | details |
| #9 | ACCEPTED | 0.00 s | details |
| #10 | ACCEPTED | 0.00 s | details |
| #11 | ACCEPTED | 0.00 s | details |
| #12 | ACCEPTED | 0.00 s | details |
| #13 | ACCEPTED | 0.00 s | details |
| #14 | ACCEPTED | 0.00 s | details |
Code
#include <bits/stdc++.h>
using namespace std;
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define sz(x) (int)(x).size() // signed size: avoids the unsigned .size() wrap bug
using ll = long long;
using pii = pair<int,int>;
using vi = vector<int>;
#ifdef LOCAL // compile with -DLOCAL to enable, silent on the judge
#define dbg(...) cerr << "[" << #__VA_ARGS__ << "] = ", dbg_out(__VA_ARGS__)
template<class T> void dbg_out(T x) { cerr << x << '\n'; }
template<class T, class... R> void dbg_out(T x, R... r) { cerr << x << ", "; dbg_out(r...); }
#else
#define dbg(...)
#endif
int main() {
cin.tie(0)->sync_with_stdio(0); // never mix with scanf/printf after this
string s, t; cin >> s >> t;
int n = sz(s);
if (s == t) { cout << s << "\n"; return 0; }
string fresh; // 6 letters absent from both words
for (char c = 'A'; c <= 'Z' && sz(fresh) < 6; c++)
if (s.find(c) == string::npos && t.find(c) == string::npos) fresh += c;
for (int k = 1; k <= 4; k++) {
// all candidate columns for every position
vector<vector<string>> cols(n);
for (int i = 0; i < n; i++) {
string cs = fresh + s[i] + t[i];
string col(k + 1, '?'); col[0] = s[i]; col[k] = t[i];
function<void(int)> rec = [&](int j) {
if (j == k) { cols[i].push_back(col); return; }
for (char c : cs) { col[j] = c; rec(j + 1); }
};
rec(1);
}
auto ok = [&](const string &a, const string &b) {
for (int j = 0; j <= k; j++) if (a[j] == b[j]) return false; // valid words
for (int j = 1; j <= k; j++) if (a[j] != a[j-1] && b[j] != b[j-1]) return false; // no adjacent change
return true;
};
vector<vi> par(n);
for (int i = 0; i < n; i++) par[i].assign(sz(cols[i]), -2); // -2 = unreachable
for (int a = 0; a < sz(cols[0]); a++) par[0][a] = -1;
for (int i = 0; i + 1 < n; i++)
for (int a = 0; a < sz(cols[i]); a++) if (par[i][a] != -2)
for (int b = 0; b < sz(cols[i+1]); b++)
if (par[i+1][b] == -2 && ok(cols[i][a], cols[i+1][b])) par[i+1][b] = a;
int last = -1;
for (int b = 0; b < sz(cols[n-1]); b++) if (par[n-1][b] != -2) { last = b; break; }
if (last < 0) continue;
vector<string> ch(n);
for (int i = n - 1; i >= 0; i--) { ch[i] = cols[i][last]; last = par[i][last]; }
for (int j = 0; j <= k; j++) { string w; for (int i = 0; i < n; i++) w += ch[i][j]; 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 DACACA BACBCB |
Test 3
Verdict: ACCEPTED
| input |
|---|
| AB BA |
| correct output |
|---|
| AB CB CA BA |
| user output |
|---|
| AB AC BC BA |
Test 4
Verdict: ACCEPTED
| input |
|---|
| ABC BCD |
| correct output |
|---|
| ABC DBD DCD BCD |
| user output |
|---|
| ABC EBE ECE 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 |
