信息
- ID
- 1591
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
两个整数相加时,若一共发生了 c 次进位,则每次进位都会把当前位的 10 换成高一位的 1,使数位和减少 9,所以 f(x+y)=f(x)+f(y)−9c。
因此先得到不计进位时的总贡献 2N∑f(Ai),再减去所有有序数对在所有数位上产生的进位次数的 9 倍即可。
对每个模数 p=10,100,…,1015,令 Bi=Aimodp,该位发生向上进位当且仅当 Bi+Bj≥p。将所有 Bi 排序,对每个 Bi 二分第一个不小于 p−Bi 的位置,便能统计这一位产生进位的有序数对数量。
共处理 15 个模数,时间复杂度为 O(15NlogN),空间复杂度为 O(N)。