题解:CF2171C1 Renako Amaori and XOR Game (easy version)

· · 题解

CF2171C1 Renako Amaori and XOR Game (easy version) 题解

题意描述

给定两个长度为 n0/1 序列 ab。两人轮流操作第 i(a_i, b_i)i1 开始):

操作结束后计算:

A = \bigoplus_{i=1}^{n} a_i, \quad B = \bigoplus_{i=1}^{n} b_i.

胜负判定:

思路分析

时间复杂度:O(n);空间复杂度:O(n)

代码实现

#include <bits/stdc++.h>
using namespace std;

int t, n, a[200010], b[200010];

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> t;
    while (t--) {
        cin >> n;
        int d = 0, y = 0;  // d = A ⊕ B(不变量);y = 舞可控的「不同位」数量(即偶数位且 a_i ≠ b_i 的个数)
        for (int i = 1; i <= n; ++i) cin >> a[i];
        for (int i = 1; i <= n; ++i) {
            cin >> b[i];
            int c = a[i] ^ b[i];   // c = 1 当且仅当 a_i ≠ b_i
            d ^= c;                // 累积 d = ⊕(a_i ⊕ b_i),全程不变
            if (i % 2 == 0 && c) ++y;  // 偶数位且不同 → 属于舞的决策范围
        }
        if (d == 0) {
            cout << "Tie\n";       // A = B 恒成立
        } else {
            // d = 1:舞若至少有一个可控位(y ≥ 1),可强制 A = 0 ⇒ 舞胜
            cout << (y ? "Mai\n" : "Ajisai\n");
        }
    }
    return 0;
}