1 条题解
-
0
Serval 与音乐游戏:题解
思路
记 。交换求和顺序后,问题等价于对每个 求有多少个 能由 与 的非负整数线性组合表示。
非整除情形
当 时,令 ,则两个数为 。把
写成
可知它可表示当且仅当 ,即
$$s_i\bmod k\le\left\lfloor\frac{s_i}{k}\right\rfloor.$$不可表示的数恰落在下列区间中:
用值域前缀和即可在常数时间内统计一个区间含有多少个 。
具有相同 的 构成连续区间
$$\left[\left\lfloor\frac{N}{k+1}\right\rfloor+1, \left\lfloor\frac Nk\right\rfloor\right].$$整除点 若存在,需要从该区间的权值和中暂时删去,交给下一类单独计算。
整除情形
当 时,令 ,两个生成数都等于 ,所以 可表示当且仅当 。
计算 。对每个 的因子 ,统计有多少个 是 的倍数,即可得到对应 的 。
做法
- 建立序列值域的出现次数前缀和,并统计所有 的频次。
- 按整除分块枚举所有不同的 。对每个 枚举不可表示区间,用前缀和得到失败数量,再乘该块中所有非整除 的和。
- 枚举 的每个因子 ,累加所有为 倍数的最大公因数频次,并加入权值 的贡献。
小规模子任务可以直接枚举 ;中规模子任务可以对每对 使用余数判据;满分算法才使用整除分块、区间前缀和与因子汇总。
正确性证明
引理 1:若 且 ,则 可表示当且仅当 。
设 。若 ,取 即得到合法表示。反之,任意表示可写为 ;将 对 化简后仍需至少 个 ,故 时不可能。结论成立。
引理 2:算法对所有非整除 的贡献计算正确。
由引理 1,不可表示条件在固定商 时恰由算法列出的互不相交区间覆盖。前缀和准确统计其中的序列元素。整除分块枚举了所有具有该商的连续 ,并删除唯一可能的整除点,因此每个非整除 被且仅被计算一次。
引理 3:算法对所有整除 的贡献计算正确。
当 时两个生成数均为 ,所以可表示性等价于 。因为 ,又有 当且仅当 。算法正是按此条件汇总频次,故贡献正确。
定理:算法输出题目所求总和。
所有 恰分为整除与非整除两类。由引理 2、引理 3,两类贡献均被正确且不重不漏地计算,所以总和正确。
复杂度
每组测试的时间复杂度为 ,空间复杂度为 。利用所有测试的 与 之和限制,总复杂度满足要求。
- 1
信息
- ID
- 1356
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者