1 条题解
-
0
题解
思路
一次操作对每一位独立生效,所以只需知道单个数字经过若干次操作后会产生多少位。数字尚未越过 时只会加一;越过 时会分裂为 和 ,之后两部分继续独立演化。
令 表示从数字 开始连续增加 次后得到的长度。当 时长度为 ; 当 时,第一次越过 后产生的 和 分别还需演化 次,因此可得到 。
原数中的一位 经过 次操作,等价于数字 经过 次增加,所以其贡献为 。
做法
预处理 到 。对每组输入枚举 的十进制数字,把每一位对应的 相加并取模。
正确性证明
每次操作对各位分别替换,任何一位产生的新数字也只由这一位的后续演化决定,因此总长度等于 所有初始位贡献之和。
对单个初始数字,若总增量不足 ,它始终是一位,故初值正确。若总增量至少为 ,越过 时恰好分裂为 与 ;两部分剩余演化次数分别对应递推式中的 与 。由归纳法,递推值等于真实长度。于是逐位相加得到的就是整串最终长度。
复杂度
预处理时间复杂度为 ,其中 。每组测试只枚举至多十个十进制位, 总时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1099
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者