Time:2016.09.10
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
神奇的东西
断断续续地想了一天没搞出来
因为没想到离散化(╯‵□′)╯︵┻━┻
有一个有趣的性质
定义Ti=∑nj=is[i]⋅10n−j+1T_i=\sum_{j=i}^ns[i]·10^{n-j+1} (mod(mod P)P)
s[i]是原字符串中第i个位置的数字
也就是说123321
在不考虑P的情况下T4=321T_4=321,T1=123321T_1=123321
如果存在x,y(x<y)
Tx=TyT_x=T_y且P!=2,P!=5
那么s[x..y]s[x..y]就是一个合法解
Tx−Ty=s[x..y]⋅10n−yT_x-T_y=s[x..y]·10^{n-y}
P是非2非5的质数
那么s[x..y]s[x..y]这个数一定包含质因子P
然后就可以直接莫队,通过记录区间内每一段后缀mod P的值就可以计算了
由于要加的是相同个数的数量,所以每个区间[l,r]要变成[l,r+1],字符串最后添0
注意离散化,注意2,5的特判
代码:

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define M 100003
#define LL long long
using namespace std;
int n,m;
int block[M],sum[M];
LL P,ans[M],a[M],b[M],cnt[M],T[M];
char s[M];
struct query{int l,r,id;
}q[M];
int in()
{int t=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9') t=(t<<1)+(t<<3)+ch-48,ch=getchar();return t;
}
bool cmp(query a,query b)
{if (block[a.l]==block[b.l]) return a.r<b.r;return block[a.l]<block[b.l];
}
void solve()
{for (int i=1;i<=n;i++)if ((P==2&&!(s[i]-'0'&1))||(P==5&&(s[i]=='5'||s[i]=='0')))cnt[i]+=i,++T[i];for (int i=1;i<=n;++i) cnt[i]+=cnt[i-1],T[i]+=T[i-1];for (int i=1;i<=m;++i)q[i]=(query){in(),in(),i},printf("%lld\n",cnt[q[i].r]-cnt[q[i].l-1]-(T[q[i].r]-T[q[i].l-1])*(q[i].l-1));
}
main()
{scanf("%lld",&P);scanf("%s",s+1);n=strlen(s+1);m=in();if (P==2||P==5) {solve();return 0;} LL t=1;s[++n]='0';for (int i=1;i<=m;++i) q[i]=(query){in(),in()+1,i};for (int i=n;i>=1;--i)a[i]=b[i]=(a[i+1]+t*(s[i]-'0'))%P,t=t*10%P;sort(b+1,b+n+1);b[0]=unique(b+1,b+n+1)-b-1;for (int i=1;i<=n;++i) a[i]=lower_bound(b+1,b+b[0]+1,a[i])-b;block[0]=sqrt(n);for (int i=1;i<=n;++i) block[i]=(i+1)/block[0];sort(q+1,q+m+1,cmp);int L=1,R=0;LL S=0;for (int i=1;i<=m;++i){for (int j=L-1;j>=q[i].l;--j)S+=sum[a[j]]++;for (int j=L;j<q[i].l;++j)S-=--sum[a[j]];for (int j=R+1;j<=q[i].r;++j)S+=sum[a[j]]++;for (int j=R;j>q[i].r;--j)S-=--sum[a[j]];L=q[i].l;R=q[i].r;ans[q[i].id]=S;}for (int i=1;i<=m;++i) printf("%lld\n",ans[i]);
}

【BZOJ4542】大数, 莫队相关推荐

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

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

  2. 4542: [Hnoi2016]大数|莫队

    HN一天考两个莫队是什么鬼..或者说莫队不是正确的姿势..? 考虑已经知道了 l..r l..r的答案新添入 r+1 r+1如何更新当前答案 需要先预处理出后缀 modp mod p的值 bi b_i ...

  3. 【bzoj5452】[Hnoi2016]大数(莫队)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4542 首先若p=2,5则这题就是道傻逼题,前缀和搞一下没了.如果p为其他质数,那么可以 ...

  4. 洛谷P3245 [HNOI2016]大数 【莫队】

    题目 题解 除了\(5\)和\(2\) 后缀数字对\(P\)取模意义下,两个位置相减如果为\(0\),那么对应子串即为\(P\)的倍数 只用对区间种相同数个数\(x\)贡献\({x \choose 2 ...

  5. [HNOI2016] 大数(莫队)

    problem luogu-P3245 solution 将这个 nnn 位数从右往左的记录取模 ppp 的结果,即 f(i)=(f(i−1)∗10+si)%pf(i)=(f(i-1)*10+s_i) ...

  6. NBUT 1457 Sona(莫队算法+离散化)

    [1457] Sona 时间限制: 5000 ms 内存限制: 65535 K 问题描述 Sona, Maven of the Strings. Of cause, she can play the ...

  7. XOR and Favorite Number CF340E 莫队算法

    题目链接 题意:求给定询问区间[L,R]问有多少连续区间异或值等k,多次询问可以离线. a[i]^a[i+1]^a[i+2]^a[n]=(a[1]^a[2]^a[3]^...^a[i-1])^(a[1 ...

  8. Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组

    题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...

  9. 【莫队算法】bzoj3781 小B的询问

    莫队经典. 开个数组维护a[i]出现的次数. 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> ...

最新文章

  1. java不能连接mysql,无法使用Docker将Java程序连接到MySQL
  2. LeetCode实战:反转字符串
  3. 轻松搭建博客平台-开源ASP.NET 博客Subtext 的安装
  4. java src 文件路径_java中获得src路径下文件的常用方法
  5. Java内部类(Inner Class)小记
  6. 全新的 flow.ci Dashboard 上线
  7. python基础教程:统计计数的4种常用的方法
  8. 浅谈数据结构和数据类型
  9. Oracle PL/SQL语言初级教程
  10. 中山服务器维修点,中山存储服务器
  11. 6 使用soap客户端_网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议
  12. 在基于图论的Java程序中基于DSL的输入图数据的方法
  13. linux 快捷matlab_ubuntu下Matlab_Linux添加工具包操作步骤
  14. win32使用拖放文件
  15. PPT 动画模板使用技巧
  16. 华为荣耀4A USB 灰色解决版本
  17. windows11 mars xlog解密环境配置
  18. 低代码助力生产管理:离散型制造业MES系统
  19. Python:fractions(分数)模块的使用
  20. p56 p57 p58

热门文章

  1. 多云架构落地设计和实施方案【华为云分享】
  2. 【HC资料合集】2019华为全联接大会主题资料一站式汇总,免费下载!
  3. Python不再为字符集编码发愁,使用chardet轻松解决你的困扰。
  4. TCGA肿瘤基因数据的访问(二)
  5. 中科大计算机本科毕业论文范文,中国科大本科生毕业论文管理再上新台阶
  6. 开源串口调试助手java_(串口通信编程) 开源串口调试助手Common (Com Monitor)
  7. java awt文件上传_springMVC实现前台带进度条文件上传的示例代码
  8. homebrew卡在:Updating Homebrew处
  9. 生活质量衡量系统_一文看懂质量管理精髓——“零缺陷”管理
  10. mysql安装显示3534_MySQL安装成功之后启动错误 3534、28000和简单使用