【hihocoder1445】后缀自动机二·重复旋律5 后缀自动机模板
2018-01-23 19:10
489 查看
描述
小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为一段数构成的数列。
现在小Hi想知道一部作品中出现了多少不同的旋律?
解题方法提示
输入
共一行,包含一个由小写字母构成的字符串。字符串长度不超过 1000000。
输出
一行一个整数,表示答案。
样例输入
aab
样例输出
5
题解
每个节点的maxlen[i]-maxlen[suf[i]]之和即为答案
代码
小Hi平时的一大兴趣爱好就是演奏钢琴。我们知道一个音乐旋律被表示为一段数构成的数列。
现在小Hi想知道一部作品中出现了多少不同的旋律?
解题方法提示
输入
共一行,包含一个由小写字母构成的字符串。字符串长度不超过 1000000。
输出
一行一个整数,表示答案。
样例输入
aab
样例输出
5
题解
每个节点的maxlen[i]-maxlen[suf[i]]之和即为答案
代码
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #define ll long long using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } char s[1000005]; int cnt,last,len,S,a[1000005]; int l[2000005],trans[2000005][27]; int fa[2000005];ll ans; inline void add(int x) { int c=a[x],p=last,np=++cnt;last=np;l[np]=x; for (;p&&!trans[p][c];p=fa[p]) trans[p][c]=np; if (!p) fa[np]=S; else { int q=trans[p][c]; if (l[p]+1==l[q]) fa[np]=q; else { int nq=++cnt;l[nq]=l[p]+1; memcpy(trans[nq],trans[q],sizeof trans[q]); fa[nq]=fa[q];fa[np]=fa[q]=nq; for (;trans[p][c]==q;p=fa[p]) trans[p][c]=nq; } } } int main() { scanf("%s",s+1); last=S=++cnt; int len=strlen(s+1); for (int i=1;i<=len;i++) a[i]=s[i]-'a'; for (int i=1;i<=len;i++) add(i); for (int i=2;i<=cnt;i++) ans+=l[i]-l[fa[i]]; printf("%lld",ans); return 0; }
相关文章推荐
- [SAM] hihoCoder1445 后缀自动机二·重复旋律5
- HihoCoder1445 重复旋律5(后缀自动机)
- hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
- HihoCoder - 1445 后缀自动机二·重复旋律5 后缀自动机
- 【后缀自动机】hihocoder1445 后缀自动机二·重复旋律5
- 【后缀自动机】hihocoder1449 后缀自动机三·重复旋律6
- hihoCoder #1445 : 后缀自动机二·重复旋律5
- 【hihoCoder 1466】后缀自动机六·重复旋律9
- HihoCoder1465 重复旋律8(后缀自动机)
- hihoCoder 后缀自动机三·重复旋律6
- 【hihocoder1457】后缀自动机四·重复旋律7 后缀自动机
- hihocoder #1445 : 后缀自动机二·重复旋律5
- HihoCoder - 1449 后缀自动机三·重复旋律6 后缀自动机、递推、DFS
- hihocoder #1445 : 后缀自动机二·重复旋律5
- HihoCoder - 1457 后缀自动机四·重复旋律7 后缀自动机+拓扑排序+递推、BFS
- hihoCoder.1457.后缀自动机四 重复旋律7(广义后缀自动机)
- HihoCoder1449 重复旋律6(后缀自动机)
- 【后缀自动机】【拓扑排序】【动态规划】hihocoder1457 后缀自动机四·重复旋律7
- hihoCoder.1465.后缀自动机五 重复旋律8(后缀自动机)
- hihocoder #1465 : 后缀自动机五·重复旋律8