1 条题解
-
0
题解
问题分析
题目要求计算经过 个夜晚后,宝石岛上 个居民中宝石数前 名的总和的期望(对 取模)。初始时每个居民有 颗宝石,每晚恰好有 颗宝石分裂为 颗(即总宝石数每天增加 ), 天后总宝石数为 。
核心洞察
- 总宝石数的确定性: 天后总宝石数固定为 ,这是后续推导的基础。
- 对称性与期望线性性:居民初始状态对称,可通过组合数学刻画分裂过程的概率分布。前 名总和的期望可转化为对“单个居民进入前 名的概率”与“其宝石数期望”的加权求和。
- 组合数的意义:分裂过程的路径数与组合数 相关,这是概率计算的归一化因子。
算法步骤
-
预处理阶乘与逆阶乘:为快速计算组合数 ,预先计算阶乘 及逆阶乘 (模 ),支持 组合数查询。
-
计算辅助数组 :通过类似埃氏筛的方法计算 数组,其本质是利用数论变换(如莫比乌斯反演)处理累加项,用于刻画分裂次数的分布特征。具体来说,对每个 ,通过遍历其倍数 累加 到 ,实现高效的数论函数求和。
-
期望公式的计算:利用包含-排斥原理,通过组合数 、符号项 及辅助数组 ,构造前 名总和的期望表达式。最终结果为该表达式除以归一化因子 (模意义下的除法)。
代码解析
- 预处理模块:
init函数计算阶乘 和逆阶乘 ,为组合数计算提供支持。 - 辅助数组 的计算:通过筛法遍历 到 ,对每个 及其倍数 累加 到 ,这一步利用了数论函数的 multiplicative 性质,高效处理累加项。
- 期望计算:
res的求和式结合了组合数、符号项和 数组,刻画了前 名总和的期望。最终除以 得到归一化后的期望,输出模 的结果。
复杂度分析
- 时间复杂度:。预处理阶乘为 ( 为 ),筛法计算 数组为 (类似埃氏筛的时间复杂度),最终求和为 。
- 空间复杂度:,用于存储阶乘、逆阶乘和辅助数组 。
综上,该算法通过组合数学与数论工具,结合概率期望的性质,高效求解了前 名宝石数总和的期望,适用于大规模输入数据。
- 1
信息
- ID
- 4647
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 3
- 已通过
- 1
- 上传者