1 条题解

  • 0
    @ 2026-4-6 21:13:54

    题目详解:B. Laura and Operations

    问题描述

    给定三个非负整数 a,b,ca, b, c,分别表示数字 112233 的初始个数。
    允许的操作:选择两个不同的数字(例如 xxyy),将它们擦除,然后写入与这两个数字都不同的第三个数字 zzz{1,2,3}z \in \{1,2,3\}zx,zyz \neq x, z \neq y)。
    问:经过若干次(包括零次)操作后,能否使黑板上只剩下数字 11?只剩下数字 22?只剩下数字 33
    对每个测试用例输出三个 0/10/1 表示是否可行。

    关键观察

    每次操作会改变三个数字的个数:

    • 选择数字 1122 → 擦掉一个 11 和一个 22,写入一个 33
      效果:(a,b,c)(a1,b1,c+1)(a, b, c) \to (a-1, b-1, c+1)
    • 选择数字 1133 → 擦掉一个 11 和一个 33,写入一个 22
      效果:(a,b,c)(a1,b+1,c1)(a, b, c) \to (a-1, b+1, c-1)
    • 选择数字 2233 → 擦掉一个 22 和一个 33,写入一个 11
      效果:(a,b,c)(a+1,b1,c1)(a, b, c) \to (a+1, b-1, c-1)

    不变量分析

    考虑三个数的奇偶性(模 22 的值)。
    观察每次操作对奇偶性的影响:

    • 操作 (1,2)3(1,2)\to 3aa 减少 11(奇偶翻转),bb 减少 11(翻转),cc 增加 11(翻转)。
      三个数的奇偶性全部翻转
    • 操作 (1,3)2(1,3)\to 2aa11(翻转),bb11(翻转),cc11(翻转) → 三个奇偶性全部翻转。
    • 操作 (2,3)1(2,3)\to 1aa11(翻转),bb11(翻转),cc11(翻转) → 三个奇偶性全部翻转。

    因此每次操作后,三个数的奇偶性同时取反。换句话说,任意两个数奇偶性的相等关系保持不变:
    如果开始时 bbcc 奇偶相同,那么经过任意次操作后,bbcc 仍然奇偶相同;如果开始时它们奇偶不同,那么永远不同。
    同理,(a,c)(a,c)(a,b)(a,b) 的奇偶相等关系也是不变量。

    目标状态分析

    假设我们想要最终只剩下数字 11,即最终状态为 (a,b,c)=(n,0,0)(a', b', c') = (n, 0, 0),其中 n=a+b+cn = a+b+c(总个数不变,因为每次操作减少两个增加一个,总数减 11等等:每次操作擦掉 22 个数字,写入 11 个数字,所以总数减少 11。初始总数为 a+b+ca+b+c,经过 kk 次操作后总数为 a+b+cka+b+c - k。最终只剩下一种数字,设其个数为 mm,则 m=a+b+ck1m = a+b+c - k \ge 1。因此最终个数 mm 可以是 1,2,1, 2, \dots,并不固定。但奇偶性分析仍然适用,因为最终状态中,其余两个数字个数为 00

    • 最终只剩 11bfinal=0b_{\text{final}} = 0cfinal=0c_{\text{final}} = 0
      此时 bbcc 的奇偶性都是 00(偶数),它们相同。
      根据不变量,初始的 bbcc 必须奇偶相同
    • 最终只剩 22afinal=0a_{\text{final}} = 0cfinal=0c_{\text{final}} = 0 → 初始 aacc 必须奇偶相同。
    • 最终只剩 33afinal=0a_{\text{final}} = 0bfinal=0b_{\text{final}} = 0 → 初始 aabb 必须奇偶相同。

    充分性证明

    上述奇偶相同条件是否也是充分的?是的,可以通过构造操作序列证明。

    以只剩 11 为例,假设 bbcc 奇偶相同。
    步骤 1:反复执行操作 (2,3)1(2,3)\to 1,即每次减少一个 22 和一个 33,增加一个 11。只要 b>0b>0c>0c>0,就执行该操作。
    经过若干次后,要么 b=0b=0,要么 c=0c=0(或同时为 00)。因为 bbcc 奇偶相同,它们会同时变成 00(若 b=cb=c),或者一个为 00 另一个为偶数(因为同奇偶且差为偶数)。

    • b=c=0b=c=0,已经只剩 11,完成。
    • 否则,不妨设 b>0b>0c=0c=0,且 bb 为偶数(因为同奇偶,00 是偶数,所以 bb 也是偶数)。
      此时执行两次操作组合:
      ① 选择 1122 → 擦掉 1122,写入 33(a,b,c)(a1,b1,1)(a,b,c)\to(a-1, b-1, 1)
      ② 选择 2233 → 擦掉 2233,写入 11(a1,b2,0)(a-1, b-2, 0)
      这两步合并效果:bb 减少 22aa 不变(aa 先减 11 后加 11),cc 恢复为 00
      重复此组合 b2\frac{b}{2} 次,最终 bb 变为 00,且 c=0c=0,只剩下 11

    对于只剩 22 或只剩 33 的情况,构造完全对称。

    结论

    • 可以只剩 11     \iff bbcc 奇偶相同,即 (bmod2)=(cmod2)(b \bmod 2) = (c \bmod 2)
    • 可以只剩 22     \iff aacc 奇偶相同,即 (amod2)=(cmod2)(a \bmod 2) = (c \bmod 2)
    • 可以只剩 33     \iff aabb 奇偶相同,即 (amod2)=(bmod2)(a \bmod 2) = (b \bmod 2)

    算法实现

    对于每个测试用例,只需计算三个奇偶性比较并输出 0/10/1
    时间复杂度 O(1)O(1) 每个测试用例,总复杂度 O(t)O(t)

    代码(C++)

    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(nullptr);
        int t;
        cin >> t;
        while (t--) {
            int a, b, c;
            cin >> a >> b >> c;
            cout << ((b % 2 == c % 2) ? "1" : "0") << " ";
            cout << ((a % 2 == c % 2) ? "1" : "0") << " ";
            cout << ((a % 2 == b % 2) ? "1" : "0") << "\n";
        }
        return 0;
    }
    

    示例验证

    • 输入 1 1 1b,cb,c 奇偶相同 → 1;a,ca,c 相同 → 1;a,ba,b 相同 → 1 → 输出 1 1 1
    • 输入 2 3 2b=3,c=2b=3,c=2 奇偶不同 → 0;a=2,c=2a=2,c=2 相同 → 1;a=2,b=3a=2,b=3 不同 → 0 → 输出 0 1 0
    • 输入 82 47 59b=47,c=59b=47,c=59 同为奇数 → 1;a=82,c=59a=82,c=59 不同 → 0;a=82,b=47a=82,b=47 不同 → 0 → 输出 1 0 0

    与题目示例完全一致。

    • 1

    信息

    ID
    6454
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者