加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【HNOI2016】大数

发布时间:2020-12-14 01:54:27 所属栏目:大数据 来源:网络整理
导读:题意 给一个 N 位的可能有前导 0 的数 S 及一个素数 P 。 M 个询问,每个询问求 S 的一个字串中有多少子串是 P 的倍数( 0 也是 P 的倍数)。 N , M ≤ 10 5 , P 10 10 解法 ? ? ? ? 对于询问 [ l , r ] ,我们要求的相当于 ∑ i = l r ∑ j = i r [ ( ∑ k =

题意

给一个 N 位的可能有前导 0 的数 S 及一个素数 P M 个询问,每个询问求 S 的一个字串中有多少子串是 P 的倍数( 0 也是 P 的倍数)。
N,M105 P<1010

解法

???? 对于询问 [l,r] ,我们要求的相当于

i=lrj=ir[(k=ijs[k]?10j?k)modP=0]

=i=lrj=ir[(10j?k=ijs[k]?10?k)modP=0]

???? 因为题目保证了 P 为质数,所以当 P2 P5 时, 10k 存在逆元,且 10jmodP0 。设 a[i]=s[i]?(10i)?1modPsum[i] a[i] P 下前缀和。
原式 =i=lrj=ir[(k=ija[k])modP=0]
?????=i=lrj=ir[(sum[j]?sum[i?1])modP=0]
?????=i=lrj=ir[(sum[j]=sum[i?1])]
对于多组询问,这就是一个经典的莫队了。将 sum 数组离散化,开一个桶记录一下 sum[i] 这个数值已经出现了多少次,移动左右端点时更新一下就行了。
???? 而当 P=2 P=5 时,答案比较好推,这里就不赘述了。
???? 注意可能爆 long?long

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读