1 条题解

  • 0
    @ 2026-4-19 13:49:57

    题目详细题解

    题目理解

    给定一个四位字符串 ss(允许前导零),将其视为整数 nn。需要判断是否存在非负整数 aabb,使得:

    (a+b)2=n(a + b)^2 = n

    如果存在,输出任意一组 a,ba, b;否则输出 1-1

    关键观察

    x=a+bx = a + b,则条件等价于:

    x2=nx^2 = n

    其中 xx 为非负整数。

    重要结论

    • 只要 nn 是一个完全平方数,就一定存在
    • 最简单的解是取 a=0a = 0b=xb = x,此时 x2=nx^2 = n 成立
    • 如果 nn 不是完全平方数,则无解

    为什么这样简化是正确的?

    原问题要求将 nn 表示为 (a+b)2(a + b)^2,其中 aabb 是任意的非负整数。
    x=a+bx = a + b,则 aabb 的具体取值不影响 xx 的值,只要它们的和等于 xx 即可。

    因此:

    • 先判断 nn 是否为完全平方数
    • 如果是,任取 x=nx = \sqrt{n},然后随意拆分 xx 为两个非负整数(如 00xx
    • 如果不是,输出 1-1

    算法步骤

    1. 将字符串 ss 转换为整数 nn
    2. 计算 x=nx = \lceil \sqrt{n} \rceil(实际只需检查 x2=nx^2 = n
    3. 如果 x2=nx^2 = n,输出 00xx
    4. 否则输出 1-1

    时间复杂度

    • 每个测试用例 O(1)O(1)
    • 总复杂度 O(t)O(t),其中 t104t \le 10^4

    示例验证

    输入 ss 整数 nn n\sqrt{n} 是否完全平方 输出
    "0001" 11 0 10\ 1
    "1001" 10011001 31.64\approx 31.64 1-1
    "1000" 10001000 31.62\approx 31.62
    `"4900"$ 49004900 7070 0 700\ 70 或其他解
    `"2025"$ 20252025 4545 0 450\ 45 或其他解

    注意:题目示例中 "4900" 的输出是 34 36,这是因为 34+36=7034 + 36 = 70,同样满足 (34+36)2=4900(34+36)^2 = 4900。这说明只要 a+b=70a+b = 70 即可,不一定要 007070

    • 1

    信息

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