trick大意
我对于这个trick的理解为:支持位运算的高精度
维护一个以
- 给定(可能是负)整数
,将 加到 。 时,给定 ,打印 的第 位数字(指以 为基底意义下的)。- 检查
是正值、负值还是等于 。
操作 map
进行实现,相比于线段树等数据结构维护非常的好写。
例题及实现 : [NOI2017] 整数
题意简述 : 一个整数
-
将
加上整数 ,其中 为一个整数, 为一个非负整数 -
询问
在用二进制表示时,位权为 的位的值(即这一位上的 代表 )
保证在任何时候,
- 对于所有测试点,满足
; - 对于所有测试点,满足
; - 对于所有测试点,满足
这里我们的基底为
发现其实很像一个
关于均摊时间复杂度
其实我不是很能证明,但是再次感性理解,就是假设一些段内的数为
显然加一次,他就会往后进很多位花大量时间,虽然这一次花了很多时间,但是呢,需要进位的次数其实是很少的,而不需要进位的时候,直接加又很快,这样下来我们的均摊时间就不是那么慢了。
- 具体证明看这里
代码
先咕,急的看参考资料。
习题
参考资料
如果英语还不错,可以直接看原CF博客:
Big integers with negative digits: The Trygub numbers
CF原作者的[NOI2017] 整数提交记录
__EOF__
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END