CF316G3 Good Substrings 广义后缀自动机
太累了,刷刷水~
code:
#include <bits/stdc++.h>
#define N 500005
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
char str[N];
int last,tot;
int pre[N],len[N],ch[N][27],L[N],R[N],tax[N],rk[N],cnt[N][13],tag[N];
int extend(int c)
{
int p=last;
if(ch[p][c])
{
int q=ch[p][c];
if(len[q]==len[p]+1) last=q;
else
{
int nq=++tot;
tag[nq]=tag[q];
len[nq]=len[p]+1;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
pre[nq]=pre[q],pre[q]=nq;
for(;p&&ch[p][c]==q;p=pre[p]) ch[p][c]=nq;
last=nq;
}
}
else
{
int np=++tot;
len[np]=len[p]+1,last=np;
for(;p&&!ch[p][c];p=pre[p]) ch[p][c]=np;
if(!p) pre[np]=1;
else
{
int q=ch[p][c];
if(len[q]==len[p]+1) pre[np]=q;
else
{
int nq=++tot;
tag[nq]=tag[q];
len[nq]=len[p]+1;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
pre[nq]=pre[q],pre[np]=pre[q]=nq;
for(;p&&ch[p][c]==q;p=pre[p]) ch[p][c]=nq;
}
}
}
return last;
}
int main()
{
int n,i,j,m;
// setIO("input");
scanf("%s",str+1),n=strlen(str+1),last=tot=1;
for(i=1;i<=n;++i)
{
int x=extend(str[i]-'a');
tag[x]=1;
}
scanf("%d",&m);
for(i=1;i<=m;++i)
{
int len,l,r;
scanf("%s%d%d",str+1,&L[i],&R[i]),len=strlen(str+1);
for(last=j=1;j<=len;++j)
{
int x=extend(str[j]-'a');
++cnt[x][i];
}
}
for(i=1;i<=tot;++i) ++tax[len[i]];
for(i=1;i<=tot;++i) tax[i]+=tax[i-1];
for(i=1;i<=tot;++i) rk[tax[len[i]]--]=i;
LL ans=0ll;
for(i=tot;i>1;--i)
{
int x=rk[i];
int ff=pre[x];
tag[ff]|=tag[x];
for(j=1;j<=m;++j) cnt[ff][j]+=cnt[x][j];
if(tag[x])
{
int flag=0;
for(j=1;j<=m;++j) if(cnt[x][j]<L[j]||cnt[x][j]>R[j]) flag=1;
if(!flag) ans+=1ll*(len[x]-len[ff]);
}
}
printf("%lld\n",ans);
return 0;
}
CF316G3 Good Substrings 广义后缀自动机的更多相关文章
- CF 316G3 Good Substrings——广义后缀自动机
题目:http://codeforces.com/contest/316/problem/G3 对询问串和模式串一起建一个后缀自动机,做出在每个串上的 right 集合大小之后枚举自动机上的每个点看看 ...
- SPOJ8093Sevenk Love Oimaster(广义后缀自动机)
Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was da ...
- BZOJ2780 [Spoj]8093 Sevenk Love Oimaster 【广义后缀自动机】
题目 Oimaster and sevenk love each other. But recently,sevenk heard that a girl named ChuYuXun was dat ...
- bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 对[广义后缀自动机]的一些理解
先说一下对后缀自动机的理解,主要是对构造过程的理解. 构造中,我们已经得到了前L个字符的后缀自动机,现在我们要得到L+1个字符的后缀自动机,什么需要改变呢? 首先,子串$[0,L+1)$对应的状态不存 ...
- BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)
3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽 ...
- BZOJ 3277 串 (广义后缀自动机)
3277: 串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 309 Solved: 118 [Submit][Status][Discuss] De ...
- BZOJ 3473: 字符串 [广义后缀自动机]
3473: 字符串 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 354 Solved: 160[Submit][Status][Discuss] ...
- 【SPOJ】Substrings(后缀自动机)
[SPOJ]Substrings(后缀自动机) 题面 Vjudge 题意:给定一个长度为\(len\)的串,求出长度为1~len的子串中,出现最多的出现了多少次 题解 出现次数很好处理,就是\(rig ...
- 【SPOJ】Distinct Substrings(后缀自动机)
[SPOJ]Distinct Substrings(后缀自动机) 题面 Vjudge 题意:求一个串的不同子串的数量 题解 对于这个串构建后缀自动机之后 我们知道每个串出现的次数就是\(right/e ...
随机推荐
- flink ETL数据处理
Flink ETL 实现数据清洗 一:需求(针对算法产生的日志数据进行清洗拆分) 1. 算法产生的日志数据是嵌套json格式,需要拆分 2.针对算法中的国家字段进行大区转换 3.最后把不同类型的日 ...
- 微信公众号 分享接口 签名通过 分享无效果(JSSDK自定义分享接口的策略调整)
为规范自定义分享链接功能在网页上的使用,自2017年4月25日起,JSSDK“分享到朋友圈”及“发送给朋友”接口,自定义的分享链接,其域名或路径必须与当前页面对应的公众号JS安全域名一致,否则将调用失 ...
- C#获取汉字拼音和首字母
C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...
- python中的debug
python中有很多的debug方法,大部分新人忽略了Python debugger(pdb)的重要性. 1.命令行运行 在终端中输入命令行 python -m pdb helloword.py ...
- 更新yum源并重建缓存
原文连接 1)下载wget yum install -y wget 2)备份默认的yum mv /etc/yum.repos.d /etc/yum.repos.d.backup 3)设置新的yum目录 ...
- Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...
- Java异常类的继承关系图
- Flink 原理(六)——异步I/O(asynchronous I/O)
1.前言 本文是基于Flink官网上Asynchronous I/O的介绍结合自己的理解写成的,若有不正确的欢迎大伙留言交流,谢谢! 2.Asynchronous I/O简介 将Flink用于流计 ...
- WebService知识点
Web Services简介: 什么是Web Services? Web Services 是应用程序组件 Web Services 使用开放协议进行通信 Web Services 是独立的(self ...
- MongoDB/聚合/MR
管道与Aggregation: 文档结构如下: { "_id" : 1, "item" : "abc", "price" ...