【BZOJ】【P3172】【Tjoi2013】【单词】【题解】【SAM】
来源:互联网 发布:java md5工具类运用 编辑:程序博客网 时间:2024/06/06 04:03
传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3172
换了模板……
Code:
#include<bits/stdc++.h>using namespace std;const int maxn=1e6+205;int pos[maxn],son[maxn<<1][27],pre[maxn<<1],val[maxn<<1],f[maxn<<1],sum[maxn<<1],b[maxn<<1];int last,tot,n,m;char s[maxn];int pushback(int x){val[++tot]=x;return tot;}void push(int x){int p=last;int np=pushback(val[p]+1);for(;p!=-1&&!son[p][x];p=pre[p])son[p][x]=np;if(p==-1)pre[np]=0;else{int q=son[p][x];if(val[q]==val[p]+1)pre[np]=q;else{int nq=pushback(val[p]+1);memcpy(son[nq],son[q],sizeof(son[q]));pre[nq]=pre[q];pre[q]=pre[np]=nq;for(;p!=-1&&son[p][x]==q;p=pre[p])son[p][x]=nq;}}last=np;}int main(){pre[0]=-1;scanf("%d",&n);s[0]='0';for(int i=1;i<=n;i++){char c=getchar();while(!isalpha(c))c=getchar();while(isalpha(c))s[++m]=c,c=getchar();pos[i]=m;s[++m]='z'+1;}m--;for(int i=1;i<=m;i++)push(s[i]-'a');for(int i=1;i<=tot;i++)sum[val[i]]++;for(int i=2;i<=m;i++)sum[i]+=sum[i-1];for(int i=tot;i;i--)b[sum[val[i]]--]=i;int p=0;for(int i=1;i<=m;i++)p=son[p][s[i]-'a'],f[p]=1;for(int i=tot;i;i--)f[pre[b[i]]]+=f[b[i]];int i=1;pos[0]=-1;for(int i=1;i<=n;i++){int p=0;for(int j=pos[i-1]+2;j<=pos[i];j++) p=son[p][s[j]-'a'];printf("%d\n",f[p]);}return 0;}
0 0
- 【BZOJ】【P3172】【Tjoi2013】【单词】【题解】【SAM】
- 【BZOJ】【P3172】【Tjoi2013】【单词】【题解】【AC自动机】
- 【BZOJ】【P3172】【Tjoi2013】【单词 】【题解】【SA】
- bzoj P3172 [Tjoi2013]单词
- 【BZOJ 3172】 [Tjoi2013]单词
- bzoj 3172: [Tjoi2013]单词
- BZOJ 3172 【Tjoi2013】单词
- bzoj 3172 [Tjoi2013]单词
- BZOJ 3172 [Tjoi2013]单词
- BZOJ 3172 Tjoi2013 单词 后缀数组
- BZOJ 3172 Tjoi2013 单词 fail树
- BZOJ 3172: [Tjoi2013]单词|后缀数组
- BZOJ 3172 [Tjoi2013] 单词 [AC自动机模板]
- bzoj 3172 [Tjoi2013]单词 后缀自动机
- BZOJ 3172: [Tjoi2013]单词(fail树)
- 【BZOJ 3172】[Tjoi2013]单词 Ac自动机
- BZOJ 3172 [Tjoi2013] 单词 Fail树
- [BZOJ 3172][Tjoi2013]单词(AC自动机)
- 阿里云ACE初体验
- 手把手教你:win7下安装SQL Server2005开发版步骤
- Menu G5 初使用
- C#控件窗口大小变化时同时改变控件比例的实现
- 工作的那些小事(测试篇)
- 【BZOJ】【P3172】【Tjoi2013】【单词】【题解】【SAM】
- Mac OS使用技巧之八:Dock栏使用技巧
- PushbackInputStream理解
- hdu1495——非常可乐
- HDU 1251-统计难题(map)
- 用什么软件做音乐
- LightOJ 1097 - Lucky Number [线段树二分前缀和构造数列]
- C#使用图片制作不规则窗体
- HTTP状态码详解