博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF235C Cyclical Quest
阅读量:4586 次
发布时间:2019-06-09

本文共 1609 字,大约阅读时间需要 5 分钟。

题目

化简题意:多个环型匹配串在文本串出现次数

做法

我们把环型串备份展开在文本串匹配

\(parent.len≥len\)时我们要跳父亲,因为要找\(endpos\)

\(now.len≥len\)时我们就可以统计答案了,为保证时间复杂度,我们不会把环型匹配串分成\(n\)个串匹配,所以\(now.len>len\)实际上大于的部分我们不需要管了,反正已经找到当前串状态的\(endpos\)直接加就好了

My complete code

#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef int LL;const LL maxn=3000009;LL nod=1,lst=1,q;LL len[maxn],fail[maxn],val[maxn],sum[maxn],a[maxn],son[maxn][26];LL visit[maxn];char s[maxn];inline void Insert(LL c){ LL np=++nod,p=lst; lst=np; len[np]=len[p]+1; while(p&&!son[p][c]){ son[p][c]=np; p=fail[p]; } if(!p) fail[np]=1; else{ LL q=son[p][c]; if(len[q]==len[p]+1) fail[np]=q; else{ LL nq=++nod; len[nq]=len[p]+1; memcpy(son[nq],son[q],sizeof(son[q])); fail[nq]=fail[q]; fail[np]=fail[q]=nq; while(p&&son[p][c]==q){ son[p][c]=nq; p=fail[p]; } } }++val[lst];}int main(){ scanf(" %s",s+1); for(LL i=1,Len=strlen(s+1);i<=Len;++i){ LL c(s[i]-'a'); Insert(c); } for(LL i=1;i<=nod;++i) ++sum[len[i]]; for(LL i=1,Len=strlen(s+1);i<=Len;++i) sum[i]+=sum[i-1]; for(LL i=1;i<=nod;++i) a[sum[len[i]]--]=i; for(LL i=nod;i>=2;--i) val[fail[a[i]]]+=val[a[i]]; //for(int i=1;i<=nod;++i) // printf("%d(%d) ",a[i],val[a[i]]);printf("\n"); memset(visit,-1,sizeof(visit)); scanf("%lld",&q); while(q--){ scanf(" %s",s+1); LL Len=strlen(s+1); for(LL i=1;i
=Len){ now=fail[now]; L=len[now]; } if(L>=Len&&visit[now]!=q){ ret+=(long long)val[now]; visit[now]=q; } } printf("%lld\n",ret); } return 0;}

转载于:https://www.cnblogs.com/y2823774827y/p/10312910.html

你可能感兴趣的文章
解决session阻塞的问题
查看>>
SQL Server 触发器
查看>>
css优先级计算规则
查看>>
Asp.Net Web API 2第十五课——Model Validation(模型验证)
查看>>
Silverlight 4 MVVM开发方式(三)动态换皮
查看>>
ExtJs中OA管理中组织和用户关系左右选择组件的运用
查看>>
【原创】关于高度自适应问题
查看>>
Tomcat JMX
查看>>
2019 年,容器技术生态会发生些什么?
查看>>
ubuntu安装hive
查看>>
Java NIO Selector(八)
查看>>
Hibernate入门(三)—— 一对多、多对多关系
查看>>
Openstack中查看虚拟机console log的几种方法
查看>>
科技创新平台年报系统利益相关者分析
查看>>
家庭作业第三章3.57
查看>>
ERROR! MySQL manager or server PID file could not be found!
查看>>
nginx server_name匹配顺序
查看>>
数据备份希望使用gistore备份mongo数据
查看>>
【杂谈】新学年的第一篇博客
查看>>
MySQL性能优化的21条最佳经验【转】
查看>>