1 条题解
-
0
B. Maximum Multiple Sum 详细题解
题目重述
给定整数 (),选择一个整数 满足 ,使得所有不超过 的 的倍数的和 (其中 )最大。输出使 最大的 (可以证明答案唯一)。
核心思路
由于 很小(最多 ),可以直接枚举所有可能的 ,计算对应的 ,然后找出最大值对应的 。时间复杂度 完全可行。
算法步骤
- 读入测试用例数 。
- 对于每个测试用例:
- 读入整数 。
- 初始化 ,。
- 对于 从 到 :
- 计算 。
- 对于 ,只要 ,累加 。
- 如果 ,则更新 ,。
- 输出 。
数学优化(可选)
注意到倍数和可以写成算术级数:
$$S(x) = x \cdot \frac{k(k+1)}{2}, \quad k = \left\lfloor \frac{n}{x} \right\rfloor. $$因此可以在 内计算每个 的和,避免内层循环。对于 ,两种写法均可。
复杂度分析
- 枚举法:外层循环 ,内层循环 ,总复杂度 ,对于 非常快。
- 使用公式法:每个测试用例 。
- 总复杂度 ,,,完全满足。
正确性证明
- 因为 是有限整数, 的取值只有有限个,枚举所有可能并比较和的大小必然能找到最大值。
- 题目保证答案唯一,因此直接输出即可。
示例验证
- :枚举 得 , 得 ,最大值对应 ,输出 。
- : 得 , 得 , 得 ,…, 得 ,最大值对应 ,输出 。与样例一致。
总结
本题是一个简单的枚举问题,利用 很小的特点,直接计算每个 的倍数和并比较大小即可。也可通过算术级数公式优化计算。最终输出使和最大的 。
- 1
信息
- ID
- 6950
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者