题意:给定一个N位的由[0..9]组成的数字串和质数P,有M次不强制在线的询问,每次询问区间[l,r]中模P意义下为0的子串个数

N,M<=2e5,P<=1e10

思路:一次A,本来还以为要调好长时间……

考虑类似于字符串哈希的思路,预处理出每个后缀在模P意义下的余数,设从第i位到第N位的后缀的值为s[i]

[L,R]这段区间的值*10^(N-R)=s[L]-s[R+1]

特判P=2和P=5,因为是10进制只需要考虑最后一位能被整除,对于每一个询问计算每一位的贡献做前缀和即可

P取其他值时质数10^(N-R)与P必定互质,所以若[L,R]这段的值能被P整除,则s[L]-s[R+1]必定需要被P整除

取模后等价于[L,R+1]一段数字中相等数字对数,是经典的莫队

莫队部分好像都是先写扩大区间部分再写缩小区间部分的

条件允许的话还是要把所有细节想清楚了再写,效率会高很多

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
typedef long long ll;
using namespace std;
#define N 210000 struct node
{
int x,y,id;
}c[N]; ll a[N],b[N],s[N],ans[N],pos[N],A[N];
char ch[N];
int n,m; bool cmp(node a,node b)
{
if(pos[a.x]==pos[b.x]) return a.y<b.y;
return a.x<b.x;
} void init()
{
int block=int(sqrt(N));
for(int i=;i<=N;i++) pos[i]=(i-)/block+;
} void solve()
{
memset(s,,sizeof(s));
ll tmp=;
int nowx=;
int nowy=;
for(int i=;i<=m;i++)
{
while(nowx>c[i].x)
{
tmp+=s[a[nowx-]];
s[a[nowx-]]++;
nowx--;
}
while(nowy<c[i].y)
{
tmp+=s[a[nowy+]];
s[a[nowy+]]++;
nowy++;
}
while(nowx<c[i].x)
{
s[a[nowx]]--;
tmp-=s[a[nowx]];
nowx++;
}
while(nowy>c[i].y)
{
s[a[nowy]]--;
tmp-=s[a[nowy]];
nowy--;
}
ans[c[i].id]=tmp;
}
} int main()
{
ll MOD;
scanf("%lld",&MOD);
scanf("%s",ch+);
n=strlen(ch+);
if(MOD==||MOD==)
{
for(int i=;i<=n;i++)
if((ch[i]-'')%MOD==)
{
a[i]=i; b[i]=;
}
a[]=b[]=;
for(int i=;i<=n;i++)
{
a[i]+=a[i-];
b[i]+=b[i-];
}
scanf("%d",&m);
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
ll ans=a[y]-a[x-]-1ll*(b[y]-b[x-])*(x-);
printf("%lld\n",ans);
}
return ;
}
a[n+]=;
ll mi=;
for(int i=n;i>=;i--)
{
a[i]=(a[i+]+(ch[i]-'')*mi)%MOD;
mi=mi*%MOD;
}
n++;
for(int i=;i<=n;i++) A[i]=a[i];
sort(A+,A+n+);
A[]=unique(A+,A+n+)-A-;
for(int i=;i<=n;i++) a[i]=lower_bound(A+,A+A[]+,a[i])-A;
scanf("%d",&m);
for(int i=;i<=m;i++)
{
scanf("%d%d",&c[i].x,&c[i].y);
c[i].y++;
c[i].id=i;
}
init();
sort(c+,c+m+,cmp);
solve();
for(int i=;i<=m;i++) printf("%lld\n",ans[i]);
return ;
}

【BZOJ4542】大数(莫队)的更多相关文章

  1. 【BZOJ4542】[Hnoi2016]大数 莫队

    [BZOJ4542][Hnoi2016]大数 Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个 ...

  2. [BZOJ4542] [Hnoi2016] 大数 (莫队)

    Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...

  3. 【bzoj4542】[Hnoi2016]大数 莫队算法

    题目描述 给出一个数字串,多次询问一段区间有多少个子区间对应的数为P的倍数.其中P为质数. 输入 第一行一个整数:P.第二行一个串:S.第三行一个整数:M.接下来M行,每行两个整数 fr,to,表示对 ...

  4. bzoj4542 [Hnoi2016]大数 莫队+同余

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4542 题解 我们令 \(f_i\) 表示从 \(i\) 到 \(n\) 位组成的数 \(\bm ...

  5. BZOJ.4542.[HNOI2016]大数(莫队)

    题目链接 大数除法是很麻烦的,考虑能不能将其条件化简 一段区间[l,r]|p,即num[l,r]|p,类似前缀,记后缀suf[i]表示[i,n]的这段区间代表的数字 于是有 suf[l]-suf[r+ ...

  6. 洛谷P3245 [HNOI2016]大数(莫队)

    题意 题目链接 Sol 莫队板子题.. 维护出每个位置开始的字符串\(mod P\)的结果,记为\(S_i\) 两个位置\(l, r\)满足条件当且仅当\(S_l - S_r = 0\),也就是\(S ...

  7. [BZOJ4542] [JZYZOJ2014][Hnoi2016] 大数(莫队+离散化)

    正经题解在最下面 http://blog.csdn.net/qq_32739495/article/details/51286548 写的时候看了大神的题解[就是上面那个网址],看到下面这段话 观察题 ...

  8. bzoj 4542: [Hnoi2016]大数 (莫队)

    Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...

  9. 【莫队】bzoj4542: [Hnoi2016]大数

    挺有意思的,可以仔细体味一下的题:看白了就是莫队板子. Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小 ...

随机推荐

  1. python 使用uuid 出现重复

    同时保存入数据库时候 ,使用  uuid.uuid1() 后出现 重复的 id , 现在  修改为 (uuid.uuid5(uuid.NAMESPACE_DNS, str(uuid.uuid1()) ...

  2. 项目实战15.1—企业级堡垒机 jumpserver一步一步搭建

    本文收录在Linux运维企业架构实战系列 环境准备 系统:CentOS 7 IP:192.168.10.101 关闭selinux 和防火墙 # CentOS 7 $ setenforce 0 # 可 ...

  3. Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本

    Shell脚本使用汇总整理——mysql数据库5.7.8以前备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/92234 ...

  4. PKI

    公钥基础设施(Public Key Infrastructure,简称PKI)是眼下网络安全建设的基础与核心,是电子商务安全实施的基本保障,因此,对PKI技术的研究和开发成为眼下信息安全领域的热点.本 ...

  5. (转)Windows 支持 DirectX 和 OpenGL,为什么大多数 PC 游戏还是 DirectX 开发?

    事实上在早年OpenGL即使在游戏领域也是对DirectX压倒性的优势.John Carmack曾嘲讽DirectX是"horribly broken" 的API.直到Direct ...

  6. tcl之基本语法—3

  7. 【jenkins】【java】【tomcat】windows host key verification failed

    适用于windows系统 出现这个问题的原因tomcat启动的用户找不到本地公私钥路径 如果tomcat 启动时候选择 local system account (默认此选项),请把你的公私钥文件(i ...

  8. 免费证书Let’s Encrypt

    我们自己也可以签发 SSL 安全证书,但是我们自己签发的安全证书不会被主流的浏览器信任,所以我们需要被信任的证书授权中心( CA )签发的安全证书.而一般的 SSL 安全证书签发服务都比较贵,比如 G ...

  9. 2016-2017 ACM-ICPC CHINA-Final

    A Gym 101194A Number Theory Problem 7 的二进制是111,2k-1 的二进制是 k 个 1.所以 k 能被 3 整除时 2k-1 才能被 7 整除. #includ ...

  10. 华东交通大学2018年ACM“双基”程序设计竞赛 D

      摸鱼之王MIKU酱想去埃及玩,需要一个人陪同.小新和小磊都想陪MIKU酱一起去,但名额只有一个.所以小磊和小新决定用一个小游戏来决定谁和MIKU酱出去玩.    游戏的道具是21张塔罗牌,塔罗牌分 ...