CF468C Hack it! 题解

题意:给出一个数 a,构造一组 l,r 使得 i=lrf(i)0(moda)。其中 a1018l,r10200

分析:

以下用 (l,r) 表示构造出来的一对 l,rf(l,r)=i=lrf(i)

考虑从某个值一步一步移动到模 a0 的情况。如果选择 (0,9),发现 f(1,10)=f(0,9)+1。这很好理解,f(1,10) 相当于 f(0,9)f(0)+f(10)100 的最高位多 1,所以使得 f(1,10)=f(0,9)+1。一直从 f(0,9) 推到 f(9,19) 都是这种情况,但是 f(10,20)f(9,19)+1,因为 19 发生了进位,导致两边低位的变化不同。如果将十位的 1 移至足够高的数位,就能在移动区间的时候不发生进位。

所以,一开始我们选择 (0,10181),因为 a1018,区间至多右移 1018 次,不会发生进位。不难发现,现在需要移动的步数就是 af(0,10181) % a。通过简单的计算,得到 f(0,10181)=45×18×1017=81×1018,于是答案为 (81×1018 % a,10181+81×1018 % a)

posted @   jr_inf  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示