1 条题解

  • 0
    @ 2026-6-19 10:31:09

    📝 题目大意

    黑板上有三个非负整数 A,B,CA, B, C。每次操作可以任选两个数各减 11,或者三个数全部减 11。判断能否将所有数变为 00,若能则输出最小操作次数。

    💡 解题思路

    1. 题目分析

      • 两种操作的本质:操作二(全减)每次消耗总和 33,操作一(选二减)每次消耗总和 22。操作二"效率更高",但受限于不能使任何数变为负数。
      • 设排序后 smbs \leq m \leq b。每个操作至多使 bb 减少 11,因此操作次数下界为 bb
      • 数据范围 0A,B,C10180 \leq A,B,C \leq 10^{18},必须使用 long long,且需要 O(1)O(1) 的数学判定。
    2. 算法推导

      • 核心思路:尝试构造恰好 bb 次操作的方案,因为 bb 是理论下界,若能达成则必为最优。
      • 构造策略
        1. 先用操作一选 (s,b)(s, b),执行 bmb - m 次,使最大数降到与中间数持平。此时三个数变为:$$s' = s - (b - m),\quad m' = m,\quad b' = b - (b - m) = m$$
        2. 现在 m=b=mm' = b' = m,再用操作二(全减)执行 ss' 次,将最小数清零。此时三个数变为:0,ms,ms0,\quad m - s',\quad m - s'
        3. 最后用操作一选剩余两个数,执行 msm - s' 次,全部归零。
      • 总操作次数:$$(b - m) + s' + (m - s') = (b - m) + s' + m - s' = b$$恰好达到下界。
      • 可行性条件:上述构造要求 s=s(bm)0s' = s - (b - m) \geq 0,即 sbms \geq b - m。等价于 s+mbs + m \geq b(三角形不等式)。
      • s<bms < b - m,则无论如何操作,ss 都会在 bbmm 差距抹平之前变为负数,不可行,输出 1-1
      • 该推导与 std.cpp 的判定逻辑完全一致:small >= (big - mid) 时输出 big,否则输出 -1
    3. 边界与细节

      • 全零情况A=B=C=0A=B=C=0,排序后 s=0,m=0,b=0s=0, m=0, b=0sbms \geq b-m 成立(000 \geq 0),输出 b=0b=0,正确。
      • 一个非零、其余为零:如 0,0,10,0,1s=0,m=0,b=1s=0, m=0, b=1s<bms < b-m0<10 < 1),输出 1-1,正确。
      • 溢出A,B,CA,B,C 最大 101810^{18}big - mid 和比较运算均在 long long 范围内,不会溢出。

    ⏱️ 复杂度分析

    • 时间复杂度:仅需排序三个数(O(1)O(1))和一次比较(O(1)O(1)),总体 O(1)O(1)
    • 空间复杂度:仅存储三个 long long 变量,O(1)O(1)

    💻 标准代码 (C++)

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        vector<long long> que(3);          // 存储三个输入数
        for (long long i = 0; i < 3; ++i)
            cin >> que[i];
        sort(que.begin(), que.end());      // 升序排序,得到 small ≤ mid ≤ big
        long long small = que[0], mid = que[1], big = que[2];
        // 核心判定:最小值是否足以填补最大值与中间值的差距
        if (small >= (big - mid))
            cout << big;                   // 可行,最小操作次数即最大值
        else
            cout << -1;                    // 不可行
        return 0;
    }
    

    信息

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