GESP 202603七级T1题解
2026-03-14 22:49:42
发布于:广东
原来要写游记的,结果发现还是题解适合我
还有就是真爽, 分钟创飞七级。
T1
形式化题意
组数据
给定一个数 ,随意拆成任意个数,使乘积最大,结果对 取模。
输入
第一行一个数 ,表示 组数据。
接下来 行,一行一个数,第 行表示第 组数据 。
输出
对于每一组数据,输出可能的乘积最大值。
数据范围
对于 的数据保证:。
对于全部数据保证:。
思路
先给出结论:在任意情况下,尽可能的多拆出 ,并根据余数分类处理。
证明
1. 最优拆分中不会出现大于3的因子
首先可以证明,在最优的拆解方案中,拆出来的整数不会大于 。
考虑反证法,假设最优方案中有大于等于 的因子 ,那么我们可以将它拆解成 和 。通过比较拆分前后的乘积变化:
比较 和 的大小:
这意味着,如果 ,将其拆成 和 后,乘积不会变小,甚至更大。因此,所有大于等于 的因子都应该被继续分解,直到所有因子都小于等于 为止。
2. 最优拆分中不会出现因子1
对乘积无贡献,只会减少其他因子的大小,因此最优拆解方案中不会出现 。
换句话说
3.论证3比2更优,并确定最终规则
既然因子只能等于 或 ,那么问题就转换成:在总和为 的情况下,如何分配 和 ,使得乘积 乘积最大?
很明显,在总和相同的情况下,将三个 替换成两个 总是更优。因此,在拆分中,应经可能的使用 。
代码实现
在实际情况中, 不总是能被正好的全拆分成 需要分类讨论。
当 时
可直接全部拆分成 ,顾答案为 。
当 时
拆分完后发现还剩下 ,与其单独拎出来浪费不如与一个 合并变为 ,顾答案为 。
当 时
拆分完后发现还剩下一个 ,单独拎出来即可,顾答案为
最后
GESP最新力作,七级笑传之“超超别”,直接把原题搬过来了事了,一点更改没有。深怕写过原题的不会写,没写过的能拿分。
代码就不贴了,一个快速幂和判断的事,记得特判,在 时会出现 的情况,显然错误。
全部评论 5
1
昨天 来自 上海
0蒟蒻报到orz昨天 来自 河北
0其实可以用递推
昨天 来自 上海
0if (i % 3 == 0) dp[i] = dp[i - 3] * 3; else if (i % 3 == 1) dp[i] = dp[i - 4] * 4; else dp[i] = dp[i - 2] * 2; dp[i] %= 1e9;大概当时就是这么写的
昨天 来自 上海
0
这题我就记了个结论就秒掉了
2天前 来自 上海
0题解还是要证明的...虽然只要记结论能颗秒,我有一个可怜的同学想了1h
2天前 来自 广东
0
也就数学题能写出看起来这么高大上的题解了QwQ
2天前 来自 广东
0




























有帮助,赞一个