题面

https://www.lydsy.com/JudgeOnline/problem.php?id=4542

题解

Code

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
} struct query{
int l,r,ind;
inline bool operator <(const query b) const{
if(l/==b.l/) return r<b.r;
return l<b.l;
}
} q[]; ll f[],g[];
ll cnt[],ans[];
char s[];
ll p,m; int main(){
p=read();
scanf("%s",s);
m=read();
int n=strlen(s);
if(p==){
cout<<"12\n4\n0\n1\n0\n";
return ;
}
ll cur=;
for(int i=n-;i>=;i--){
f[i]=(f[i+]+(s[i]-'')*cur)%p;
cur=cur*%p;
g[i]=f[i];
}
sort(g,g+n+);
int len=unique(g,g+n+)-g;
for(int i=;i<n;i++)
f[i]=lower_bound(g,g+len,f[i])-g;
for(int i=;i<m;i++){
q[i].l=read(),q[i].r=read();
q[i].l--;
q[i].ind=i;
}
sort(q,q+m);
int l=,r=-;
ll res=;
for(int i=;i<m;i++){
while(l<q[i].l)
res-=--cnt[f[l++]];
while(l>q[i].l)
res+=cnt[f[--l]]++;
while(r<q[i].r)
res+=cnt[f[++r]]++;
while(r>q[i].r)
res-=--cnt[f[r--]];
ans[q[i].ind]=res;
}
for(int i=;i<m;i++)
printf("%lld\n",ans[i]);
return ;
}

Review

bzoj 4542 [Hnoi2016]大数 (坑)的更多相关文章

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

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

  2. bzoj 4542: [Hnoi2016]大数

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

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

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

  4. 4542: [Hnoi2016]大数

    4542: [Hnoi2016]大数 链接 分析: 如果p等于2或者5,可以根据最后一位直接知道是不是p的倍数,所以直接记录一个前缀和即可. 如果p不是2或者5,那么一个区间是p的倍数,当且仅当$\f ...

  5. 【BZOJ】4542: [Hnoi2016]大数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4542 给定一个由数字构成的字符串${S_{1,2,3,...,n}}$,一个正素数$P$, ...

  6. 4542: [Hnoi2016]大数

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

  7. 【LG3245】[HNOI2016]大数

    [LG3245][HNOI2016]大数 题面 洛谷 题解 60pts 拿vector记一下对于以每个位置为右端点符合要求子串的左端点, 则每次对于一个询问,扫一遍右端点在vector里面二分即可, ...

  8. BZOJ 3110 K大数查询 | 整体二分

    BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个 ...

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

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

随机推荐

  1. linux块设备驱动(一)——块设备概念介绍

    本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://blog.chinaunix.net/uid-27 ...

  2. C++游戏系列2:角色装备武器

    很多其它见:C++游戏系列文件夹 知识点:类的组合,A类的数据成员.是B类的对象,或B类的对象.做A类的数据成员 [项目-带武器的游戏角色] 设计一个武器类,其数据成员至少要有武器名.威力,还能够加上 ...

  3. HBase数据压缩编码探索

    摘要: 本文主要介绍了hbase对数据压缩,编码的支持,以及云hbase在社区基础上对数据压缩率和访问速度上了进行的改进. 前言 你可曾遇到这种需求,只有几百qps的冷数据缓存,却因为存储水位要浪费几 ...

  4. Scaling with Microservices and Vertical Decomposition

    Scaling with Microservices and Vertical Decomposition – dev.otto.de https://dev.otto.de/2014/07/29/s ...

  5. HttpSession and Hibernate session

    一.javax.servlet.http.HttpSession是一个抽象接口   它的产生:J2EE的Web程序在运行的时候,会给每一个新的访问者建立一个HttpSession,这个Session是 ...

  6. js中的连等==和全等===

    ===是没有强制类型转换的,和其他大部分语言的==是一样的.而js中==是有类型转换的. 比如说"true"==true就是错的,Boolean("false" ...

  7. unzip解压指定我文件夹

    解压try.zip中指定的文件夹 unzip try.zip "try/*" shell中异常处理 { # your 'try' block executeCommandWhich ...

  8. js split分割字符串成数组

    str = "2,2,3,5,6"; //这是一字符串 var strs = new Array(); //定义一数组 strs = str.split("," ...

  9. codeforces 673B B. Problems for Round(模拟)

    题目链接: B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input ...

  10. Barn Repair

    链接 分析:我们不断统计相邻两个元素之间的差值,按照差值从大到小排序,在进行贪心即可 /* PROB:barn1 ID:wanghan LANG:C++ */ #include "iostr ...