About
欢迎来到我的个人垃圾站,这里不时投放一些垃圾(bushi
欢迎来到我的个人垃圾站,这里不时投放一些垃圾(bushi
从 4.1 日开始放春假,今天是第三天。
昨天杭州一日游。
公交车、地铁加减速急。人多,很挤,尤其是公交,坐完肚子疼…
一路上赶路去各种景区。
大体就是这样。
成功拉朋友入了 DCS 的坑,第一次成功起飞,期待之后编队飞行。
TODO List 还有好多代办事项啊,越堆越多了…
今日是开学后的第一个周末,这学期是史上最短的一学期。
好久没打 Atcoder 了。这周 Atcoder D 题水成啥了,一个 DFS 就结束了。(第一次被卡 hash 了
给定一个不含前导 0 的大整数 N 由 K 段组成,第 i 段由 li 个 ci 组成。(1≤K≤105,1≤li≤109,0≤ci≤9)
给定一个正整数 M(1≤M≤104),求 ⌊MN⌋(mod1007)
⌊ba⌋(modc)=⌊ba(modbc)⌋
数轴上从 0 开始每隔 b−1 个数划为一个小区间,形成若干段长度为 b 的小区间,从左到右依次编号为 0,1,2,…。这里每个数的编号就代表着 ⌊ba⌋ 的值。
然后类似的,每隔 c−1 个区间划为一个大区间,形成若干段长度为 c 的大区间,对于每个大区间内部从左到右依次编号 0,1,2,…,c−1。这里每个小区间所对应的编号就代表着 ⌊ba⌋(modc) 的值。
不难看出,我们可以颠倒两步的顺序:
而这对应着先取模再除。
也就是说先除再取模和先取模再除是等价的。
首先,由上述定理,原文题等价于求 ⌊MN(modM×10007)⌋,对于每一个循环的部分考虑倍增,对于长度为 2n 次方的 111…1 进行求解。对于询问,将 li 进行二进制拆分,累计贡献即可。
我们发现 999…9=10n−1 是 111…1 的 9 倍,并且可以用快速幂求。
那么我们为什么不进一步使用定理,得到 ⌊9M9N(modM×10007×9)⌋
举个例子,当 li=5,ci=3 时,9N=33333=3×99999=3×(105−1)。快速幂计算即可。