HDU4622 Reincarnation 字符串 SAM
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU4622.html
题目传送门 - HDU4622
题意
多组数据。
对于每一组数据,给定一个字符串 s ,以及 m 次询问,每次询问 s 的一个子串的不同子串个数。
$|s|\leq 2000,m\leq 10000$
题解
直接 SAM 预处理一下每一个区间的答案就可以了。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=2005;
int T,n,m;
LL now,ans[N][N];
struct SAM{
int Next[26],fa,Max;
}t[N<<1];
char s[N];
int size;
void init(){
memset(t,0,sizeof t);
size=1,t[0].Max=-1;
for (int i=0;i<26;i++)
t[0].Next[i]=1;
}
int extend(int p,int c){
if (t[p].Next[c]&&t[p].Max+1==t[t[p].Next[c]].Max)
return t[p].Next[c];
int np=++size,q,nq;
t[np].Max=t[p].Max+1;
for (;!t[p].Next[c];p=t[p].fa)
t[p].Next[c]=np;
q=t[p].Next[c];
if (t[p].Max+1==t[q].Max)
t[np].fa=q,now+=t[np].Max-t[q].Max;
else {
nq=++size;
t[nq]=t[q],t[nq].Max=t[p].Max+1;
t[np].fa=t[q].fa=nq;
now+=t[np].Max-t[nq].Max;
for (;t[p].Next[c]==q;p=t[p].fa)
t[p].Next[c]=nq;
}
return np;
}
int main(){
scanf("%d",&T);
while (T--){
scanf("%s%d",s+1,&m);
n=strlen(s+1);
for (int i=1;i<=n;i++){
now=0;
init();
for (int j=i,p=1;j<=n;j++){
p=extend(p,s[j]-'a');
ans[i][j]=now;
}
}
while (m--){
int L,R;
scanf("%d%d",&L,&R);
printf("%lld\n",ans[L][R]);
}
}
return 0;
}
HDU4622 Reincarnation 字符串 SAM的更多相关文章
- HDU4622 Reincarnation【SAM】
		HDU4622 Reincarnation 给出一个串,每次询问其一个子串有多少不同的子串 按每个后缀建立\(SAM\)不断往后加字符,然后记录答案,查询的时候直接用即可 //#pragma GCC ... 
- 洛谷P4482 [BJWC2018]Border 的四种求法  字符串,SAM,线段树合并,线段树,树链剖分,DSU on Tree
		原文链接https://www.cnblogs.com/zhouzhendong/p/LuoguP4482.html 题意 给定一个字符串 S,有 q 次询问,每次给定两个数 L,R ,求 S[L.. ... 
- UOJ#395. 【NOI2018】你的名字   字符串,SAM,线段树合并
		原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ395.html 题解 记得同步赛的时候这题我爆0了,最暴力的暴力都没调出来. 首先我们看看 68 分怎么做 ... 
- BZOJ4566 [Haoi2016]找相同字符 字符串 SAM
		原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4566.html 题目传送门 - BZOJ4566 题意 给定两个字符串 $s1$ 和 $s2$ ,问有 ... 
- Codeforces 235C Cyclical Quest 字符串 SAM KMP
		原文链接https://www.cnblogs.com/zhouzhendong/p/CF235C.html 题目传送门 - CF235C 题意 给定一个字符串 $s$ ,多组询问,每组询问的形式为 ... 
- Codeforces 452E Three strings 字符串 SAM
		原文链接https://www.cnblogs.com/zhouzhendong/p/CF542E.html 题目传送门 - CF452E 题意 给定三个字符串 $s1,s2,s3$ ,对于所有 $L ... 
- Codeforces 873F Forbidden Indices 字符串 SAM/(SA+单调栈)
		原文链接https://www.cnblogs.com/zhouzhendong/p/9256033.html 题目传送门 - CF873F 题意 给定长度为 $n$ 的字符串 $s$,以及给定这个字 ... 
- Codeforces 316G3 Good Substrings 字符串 SAM
		原文链接http://www.cnblogs.com/zhouzhendong/p/9010851.html 题目传送门 - Codeforces 316G3 题意 给定一个母串$s$,问母串$s$有 ... 
- BZOJ1396 识别子串 字符串 SAM 线段树
		原文链接http://www.cnblogs.com/zhouzhendong/p/9004467.html 题目传送门 - BZOJ1396 题意 给定一个字符串$s$,$|s|\leq 10^5$ ... 
随机推荐
- [转]PHP开发中涉及到emoji表情的三种处理方法
			最近几个月做微信开发比较多,存储微信昵称必不可少,可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一 ... 
- [加密算法]为什么说RSA难以被破解
			RSA算法运用了数学“两个大的质数相乘,难以在短时间内将其因式分解”的这么一套看似简单事实上真的是很困难的一个数学难题...... 以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我 ... 
- python创建tcp服务端和客户端
			1.tcp服务端server from socket import * from time import ctime HOST = '' PORT = 9999 BUFSIZ = 1024 ADDR ... 
- Oracle 数据库架构
			Oracle 数据库架构 查看数据库在linux系统的安装目录路径情况: [root@localhost ~]# cd /u01/app/oracle/oradata/orcl/ [root@loca ... 
- Confluence 6 企业环境或者网站托管的 Java 配置策略
			Confluence 需要依赖一些 Java 的库才能够允运行.一些依赖的 Java 库应用了 Java 的语言特性,但是又是被 Java 的安全策略所限制的. 这个通常来说是不会造成任何问题的.默认 ... 
- java----java工具类
			System: Runtime: Random: Scanner: Arrays: MessageFormat: Math: 日期: Comparable: cloneable接口: 数字处理: MD ... 
- cf1132G 线段树解分区间LIS(一种全新的线段树解LIS思路)+单调栈
			/* 给定n个数的数列,要求枚举长为k的区间,求出每个区间的最长上升子序列长度 首先考虑给定n个数的数列的LIS求法:从左往右枚举第i点作为最大点的贡献, 那么往左找到第一个比a[i]大的数,设这个数 ... 
- AI-URL注册器
			官方文档地址:https://www.django-rest-framework.org/tutorial/quickstart/#serializers #url生成器生成四个url,就可以访问关于 ... 
- 史上最简单的SpringCloud教程 | 第六篇: 分布式配置中心(Spring Cloud Config)
			一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件. 在Spring Cloud中,有分布式配置中心组件spring cloud confi ... 
- Sql Server并发和事务
			锁的作用范围通常在事务中,事务是建立在并发模式下. 从SQL Server 2005开始,加入了一种新的并发模式-----乐观并发.不管使用哪种并发模式,如果多个会话同时修改相同的数据,都会产生资源争 ... 
