1 条题解

  • 0
    @ 2026-5-5 20:59:31

    B. Maximum Multiple Sum 详细题解

    题目重述

    给定整数 nn2n1002 \le n \le 100),选择一个整数 xx 满足 2xn2 \le x \le n,使得所有不超过 nnxx 的倍数的和 S(x)=x+2x+3x++kxS(x) = x + 2x + 3x + \dots + kx(其中 k=n/xk = \lfloor n/x \rfloor)最大。输出使 S(x)S(x) 最大的 xx(可以证明答案唯一)。

    核心思路

    由于 nn 很小(最多 100100),可以直接枚举所有可能的 xx,计算对应的 S(x)S(x),然后找出最大值对应的 xx。时间复杂度 O(n2)O(n^2) 完全可行。

    算法步骤

    1. 读入测试用例数 tt
    2. 对于每个测试用例:
      • 读入整数 nn
      • 初始化 best_x=2best\_x = 2best_sum=0best\_sum = 0
      • 对于 xx22nn
        • 计算 S=0S = 0
        • 对于 i=x,2x,3x,i = x, 2x, 3x, \dots,只要 ini \le n,累加 SS+iS \leftarrow S + i
        • 如果 S>best_sumS > best\_sum,则更新 best_sum=Sbest\_sum = Sbest_x=xbest\_x = x
      • 输出 best_xbest\_x

    数学优化(可选)

    注意到倍数和可以写成算术级数:

    $$S(x) = x \cdot \frac{k(k+1)}{2}, \quad k = \left\lfloor \frac{n}{x} \right\rfloor. $$

    因此可以在 O(1)O(1) 内计算每个 xx 的和,避免内层循环。对于 n100n \le 100,两种写法均可。

    复杂度分析

    • 枚举法:外层循环 O(n)O(n),内层循环 O(n/x)O(n/x),总复杂度 O(nlogn)O(n \log n),对于 n100n \le 100 非常快。
    • 使用公式法:每个测试用例 O(n)O(n)
    • 总复杂度 O(tn)O(t \cdot n)t100t \le 100n100n \le 100,完全满足。

    正确性证明

    • 因为 nn 是有限整数,xx 的取值只有有限个,枚举所有可能并比较和的大小必然能找到最大值。
    • 题目保证答案唯一,因此直接输出即可。

    示例验证

    • n=3n=3:枚举 x=2x=2S=2S=2x=3x=3S=3S=3,最大值对应 x=3x=3,输出 33
    • n=15n=15x=2x=2S=56S=56x=3x=34545x=4x=42424,…,x=15x=151515,最大值对应 x=2x=2,输出 22。与样例一致。

    总结

    本题是一个简单的枚举问题,利用 nn 很小的特点,直接计算每个 xx 的倍数和并比较大小即可。也可通过算术级数公式优化计算。最终输出使和最大的 xx

    • 1

    信息

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