hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
2017-10-10 19:39
399 查看
给入门新手的模板题,套kuangbin大佬的模板。
当前节点的minlen就等于当前节点的fa节点的maxlen+1。
当前节点的minlen就等于当前节点的fa节点的maxlen+1。
#include <bits/stdc++.h> using namespace std; const int CHAR = 26; const int MAXN = 1100010; long long res = 0; struct SAM_Node { SAM_Node *fa,*next[CHAR]; int len; int id,pos; SAM_Node() {} SAM_Node(int _len) { fa = 0; len = _len; memset(next,0,sizeof(next)); } }; SAM_Node SAM_node[MAXN*2], *SAM_root, *SAM_last; int SAM_size; SAM_Node *newSAM_Node(int len) { SAM_node[SAM_size] = SAM_Node(len); SAM_node[SAM_size].id = SAM_size; return &SAM_node[SAM_size++]; } SAM_Node *newSAM_Node(SAM_Node *p) { SAM_node[SAM_size] = *p; SAM_node[SAM_size].id = SAM_size; return &SAM_node[SAM_size++]; } void SAM_init() { SAM_size = 0; SAM_root = SAM_last = newSAM_Node(0); SAM_node[0].pos = 0; } void SAM_add(int x,int len) { SAM_Node *p = SAM_last, *np = newSAM_Node(p->len+1); np->pos = len; SAM_last = np; for(; p && !p->next[x]; p = p->fa) p->next[x] = np; if(!p) { np->fa = SAM_root; res += (np->len-np->fa->len); return; } SAM_Node *q = p->next[x]; if(q->len == p->len + 1) { np->fa = q; res += (np->len-np->fa->len); return; } SAM_Node *nq = newSAM_Node(q); nq->len = p->len + 1; q->fa = nq; np->fa = nq; for(; p && p->next[x] == q; p = p->fa) p->next[x] = nq; res += (np->len-np->fa->len); } void SAM_build(char *s) { SAM_init(); int len = strlen(s); for(int i = 0; i < len; i++) SAM_add(s[i] - 'a',i+1); } char str[MAXN]; int main() { scanf("%s",str); SAM_build(str); printf("%lld\n",res); return 0; }
相关文章推荐
- HihoCoder - 1445 后缀自动机二·重复旋律5 后缀自动机
- HihoCoder1445 重复旋律5(后缀自动机)
- 【后缀自动机】hihocoder1445 后缀自动机二·重复旋律5
- [SAM] hihoCoder1445 后缀自动机二·重复旋律5
- 【hihocoder1445】后缀自动机二·重复旋律5 后缀自动机模板
- 【hihocoder1457】后缀自动机四·重复旋律7 后缀自动机
- 【后缀自动机】【拓扑排序】【动态规划】hihocoder1457 后缀自动机四·重复旋律7
- hihocoder #1445 : 后缀自动机二·重复旋律5
- HihoCoder1465 重复旋律8(后缀自动机)
- 【hihoCoder 1466】后缀自动机六·重复旋律9
- HihoCoder - 1449 后缀自动机三·重复旋律6 后缀自动机、递推、DFS
- hihocoder #1445 : 后缀自动机二·重复旋律5
- hihoCoder.1457.后缀自动机四 重复旋律7(广义后缀自动机)
- HihoCoder1449 重复旋律6(后缀自动机)
- HihoCoder - 1457 后缀自动机四·重复旋律7 后缀自动机+拓扑排序+递推、BFS
- hihoCoder.1465.后缀自动机五 重复旋律8(后缀自动机)
- hihoCoder #1445 : 后缀自动机二·重复旋律5
- hihoCoder 后缀自动机三·重复旋律6
- 【后缀自动机】hihocoder1449 后缀自动机三·重复旋律6
- hiho一下第128周 后缀自动机二·重复旋律5