【bzoj4542】[Hnoi2016]大数


#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std; typedef long long LL; #define N 100010 struct Node
{
LL val;
int id;
}md[N]; struct data
{
int l,r,id;
}ask[N]; char s[N]; LL c[N],d[N],h[N];
LL a[N]; LL p;
int m,n;
int l,r; int len,K; int cmp(Node aa,Node bb)
{
return aa.val<bb.val;
} int cmp2(data aa,data bb)
{
return aa.l/K==bb.l/K ? aa.r<bb.r : aa.l<bb.l;
} void work()
{
for (int i=;i<=len;i++)
{
d[i]=d[i-]+((s[i-]-'')%p ? : i);
c[i]=c[i-]+((s[i-]-'')%p==);
}
scanf("%d",&m);
while (m--)
{
scanf("%d%d",&l,&r);
printf("%lld\n",d[r]-d[l-]-(c[r]-c[l-])*(l-));
}
} int main()
{
scanf("%lld",&p);
scanf("%s",s);
len=strlen(s);
K=sqrt(len)+;
if (p== || p==)
{
work();
return ;
}
LL res=;
for (int i=len-;i>=;i--)
{
md[i].val=(md[i+].val+(s[i]-'')*res)%p;
md[i].id=i;
res=res*%p;
}
md[len].id=len;
sort(md,md+len+,cmp);
res=;
for (int i=;i<=len;i++)
{
if (i && md[i].val!=md[i-].val)
res++;
h[md[i].id]=res;
}
scanf("%d",&m);
for (int i=;i<=m;i++)
{
scanf("%d%d",&ask[i].l,&ask[i].r);
ask[i].l--;
ask[i].id=i;
}
sort(ask,ask+m,cmp2);
int L(),R(-);
res=;
for (int i=;i<m;i++)
{
while (R<ask[i].r)
res+=c[h[++R]]++;
while (R>ask[i].r)
res-=--c[h[R--]];
while (L>ask[i].l)
res+=c[h[--L]]++;
while (L<ask[i].l)
res-=--c[h[L++]];
a[ask[i].id]=res;
}
for (int i=;i<m;i++)
printf("%lld\n",a[i]);
return ;
}
【bzoj4542】[Hnoi2016]大数的更多相关文章
- BZOJ4542: [Hnoi2016]大数
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- [BZOJ4542] [Hnoi2016] 大数 (莫队)
Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P.现在,小 B 提出了 M 个询问,每个 ...
- bzoj4542: [Hnoi2016]大数(莫队)
这题...离散化...$N$和$n$搞错了...查了$2h$...QAQ 考虑$s[l...r]$,可以由两个后缀$suf[l]-suf[r+1]$得到$s[l...r]$代表的数乘$10^k$得到的 ...
- 【莫队】bzoj4542: [Hnoi2016]大数
挺有意思的,可以仔细体味一下的题:看白了就是莫队板子. Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小 ...
- bzoj4542 [Hnoi2016]大数 莫队+同余
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4542 题解 我们令 \(f_i\) 表示从 \(i\) 到 \(n\) 位组成的数 \(\bm ...
- 【BZOJ4542】[Hnoi2016]大数 莫队
[BZOJ4542][Hnoi2016]大数 Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个 ...
- 【LG3245】[HNOI2016]大数
[LG3245][HNOI2016]大数 题面 洛谷 题解 60pts 拿vector记一下对于以每个位置为右端点符合要求子串的左端点, 则每次对于一个询问,扫一遍右端点在vector里面二分即可, ...
- 4542: [Hnoi2016]大数
4542: [Hnoi2016]大数 链接 分析: 如果p等于2或者5,可以根据最后一位直接知道是不是p的倍数,所以直接记录一个前缀和即可. 如果p不是2或者5,那么一个区间是p的倍数,当且仅当$\f ...
- HNOI2016(BZOJ4542) 大数
HNOI2016 Day2 T3 大数 Description 小 B 有一个很大的数 S,长度达到了 N 位:这个数可以看成是一个串,它可能有前导 0,例如00009312345.小B还有一个素数P ...
- 【bzoj4542】 Hnoi2016—大数
http://www.lydsy.com/JudgeOnline/problem.php?id=4542 (题目链接) 题意 给出一个素数$P$,一个数串$S$,$m$个询问,每次询问区间$[l,r] ...
随机推荐
- NET SignaiR 实现消息的推送,并使用Push.js实现通知
一.使用背景 1. SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- 自动下载相对应的jar包
一.去到需要的 maven下载地址 http://mvnrepository.com/artifact/org.apache.struts/struts2-core/2.5.13 二.然后去到 pom ...
- Spring中注解注入bean和配置文件注入bean
注解的方式确实比手动写xml文件注入要方便快捷很多,省去了很多不必要的时间去写xml文件 按以往要注入bean的时候,需要去配置一个xml,当然也可以直接扫描包体,用xml注入bean有以下方法: & ...
- IO之DataStream数据流举例
import java.io.*; public class TestDataStream { public static void main(String[] args) { ByteArrayOu ...
- 自动清除日期目录shell脚本
很多时候备份通常会使用到基于日期来创建文件夹,对于这些日期文件夹下面又有很多子文件夹,对于这些日期文件整个移除,通过find结合rm或者delete显得有些力不从心.本文提供一个简单的小脚本,可以嵌入 ...
- DB2隔离级别
四.隔离级别与锁 数据库是利用锁和隔离级别来共同处理数据库的并发的.DB2数据库用来尝试实施并发性的方法之一是通过使用隔离级别,它决定在第一个事务访问数据时,如何对其他事务锁定或隔离该事务所使用的数据 ...
- buf.values()
buf.values() 返回:{Iterator} 创建并返回一个包含 Buffer 值(字节)的迭代器.当 Buffer 使用 for..of 声明时将自动调用该函数. const buf = B ...
- MySQL操作示例
""" MySQL综合练习作业 """ # 1.自行创建测试数据: # 创建数据库 """ create da ...
- Python模块基础
概念: 在Python中,一个.py文件就称之为一个模块(Module) 好处: 1. 提高可维护性 2. 可重用 3. 避免函数名.变量名冲突. 每个模块有独立的命名空间,因此相同名字的函数和变量完 ...
- msp430入门学习06
msp430的IO端口的第一功能 msp430入门学习