bzoj 4542 洛谷 3245 [HNOI]2016大数 题解

博客介绍了如何解决一个关于大数子串与质数倍数关系的问题,涉及到后缀和、分类讨论(质数P与10是否互质)以及使用莫队和树状数组的数据结构进行维护。对于P与10互质的情况,通过比较后缀和寻找相等无序对;对于P等于2或5的情况,仅需关注子串的末尾数字。给出了具体的代码实现思路。
摘要由CSDN通过智能技术生成

博客观赏效果更佳

题意简述

给你一个数字字符串 S S S,长度为 n < = 1 e 5 n<=1e5 n<=1e5。有一个 i n t int int范围内的质数 P P P Q < = 1 e 5 Q<=1e5 Q<=1e5次询问,每次询问一个区间 [ l , r ] [l,r] [l,r]中, S S S的多少个子串(不一定不同)是 P P P的倍数。

比如 S = " 007 " S="007" S="007",它有6个子串,分别是 { 0 , 0 , 00 , 07 , 007 } \{0,0,00,07,007\} { 0,0,00,07,007},这 6 6 6个都是 7 7 7的倍数。

思路框架

处理后缀和,分类讨论 p p p 10 10 10是否互质。一个用莫队维护,一个用树状数组维护。

具体思路

先分类讨论。

1. P和10互质

那么末尾多几个 0 0 0就不会影响对 P P P的整除性。

维护后缀和 s u f suf suf,它表示从 i i i开始的后缀接起来膜 P P P的值。特殊地, s u f [ n + 1 ] = 0 suf[n+1]=0 suf[n+1]=0。对于一个区间 [ l , r ] [l,r] [l,r],当 s u f [ l ] suf[l] suf[l] s u f [ r + 1 ] suf[r+1] suf[r+1]相等的时候, [ l , r ] [l,r] [l,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值