1 条题解

  • 0
    @ 2026-4-11 22:43:09

    题目回顾

    给定两个整数 aabb,执行一次操作:

    1. 选择一个能整除 bb 的整数 kk
    2. 同时执行:a=a×ka = a \times kb=b/kb = b / k

    求操作后 a+ba+b最大偶数值;若无法得到偶数,输出 1-1


    核心结论(标程思路)

    这道题的本质是数学规律 + 贪心: 操作后 a×ba \times b乘积永远不变,即:

    (ak)(b/k)=ab(a \cdot k) \cdot (b / k) = a \cdot b

    我们的目标是:xy=abx \cdot y = a \cdot b 的所有正整数对 (x,y)(x,y) 中,找到最大的偶数和 x+yx+y


    关键数学推导

    1. 和的奇偶性规律

    • 偶数 + 偶数 = 偶数
    • 奇数 + 奇数 = 偶数
    • 奇数 + 偶数 = 奇数

    要让 x+yx+y 为偶数,必须满足: xxyy 同奇偶

    2. 最大和的贪心策略

    固定乘积 xy=Sx \cdot y = SS=abS=a \cdot b), x+yx+y最大值出现在 一个数尽可能大,另一个尽可能小 时:

    • 最大和 = 1+S1 + S(对应 x=1,y=Sx=1,y=S
    • 次大合法和 = 2+S/22 + S/2(对应 x=2,y=S/2x=2,y=S/2,仅当 SS 为偶数时合法)

    分情况完整解法

    S=abS = a \cdot b

    情况 1:aabb 都是奇数

    • SS 是奇数,只能分解为 奇数 × 奇数
    • 最大合法偶数和 = 1+S1 + S

    情况 2:aabb 一奇一偶

    • 只有一种合法偶数方案:2+S/22 + S/2
    • 前提:SS 能被 22 整除(必然满足);

    情况 3:aabb 都是偶数

    • 本身就满足同奇偶,直接取原和 a+ba+b 就是最大值

    无法得到偶数的唯一情况

    • 当且仅当 a,ba,b 一奇一偶,且 bb 是奇数(无法选合法 kk);
    • 此时输出 1-1

    标程逻辑(C++ 标准代码)

    #include <iostream>
    #include <algorithm>
    using namespace std;
    using ll = long long;
    
    int main() {
        ios::sync_with_stdio(false);
        cin.tie(0);
        int t;
        cin >> t;
        while (t--) {
            ll a, b;
            cin >> a >> b;
            ll ans = -1;
            ll s = a * b;
            
            // 原 a+b 已经是偶数,直接最优
            if ((a + b) % 2 == 0) {
                ans = a + b;
            }
            
            // 两个都是奇数:最大和 1+s
            if (a % 2 == 1 && b % 2 == 1) {
                ans = max(ans, 1 + s);
            }
            // 一奇一偶:合法最大和 2 + s/2
            else if (b % 2 == 0) {
                ans = max(ans, 2 + s / 2);
            }
            
            cout << ans << '\n';
        }
        return 0;
    }
    

    样例验证

    样例 2:1 81\ 8

    • a=1,b=8a=1, b=8,一奇一偶
    • s=8s=8
    • 答案 = 2+8/2=62 + 8/2 = 6 ✔️

    样例 3:7 77\ 7

    • 都是奇数
    • 答案 = 1+49=501 + 49 = 50 ✔️

    样例 7:4 64\ 6

    • 都是偶数,原和 1010 不是最优
    • 合法最大和 = 2+24/2=142 + 24/2 = 14 ✔️

    总结

    1. 操作不改变乘积 aba \cdot b
    2. 目标:找同奇偶(x,y)(x,y) 使 x+yx+y 最大;
    3. 贪心取最大合法值:
      • 全奇 → 1+ab1 + a \cdot b
      • 全偶 → a+ba+b
      • 一奇一偶 → 2+(ab)/22 + (a \cdot b)/2
    4. 唯一无解:一奇一偶且 bb 为奇数 → 输出 1-1
    • 1

    信息

    ID
    6490
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者