hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
来源:互联网 发布:深圳压寨网络是培训么 编辑:程序博客网 时间:2024/05/17 07:52
给入门新手的模板题,套kuangbin大佬的模板。
当前节点的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;}
阅读全文
0 0
- hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
- hihocoder #1445 : 后缀自动机二·重复旋律5
- [SAM] hihoCoder1445 后缀自动机二·重复旋律5
- hihoCoder #1407 : 后缀数组二·重复旋律2
- 后缀自动机 重复旋律 5(求所有本质不同的子串)
- 后缀自动机 重复旋律 6(长度为K的旋律中出现次数最多的旋律的出现次数)
- 后缀数组二·重复旋律2
- hihocoder 127 后缀自动机一·基本概念
- hihocoder #1441 : 后缀自动机一·基本概念
- hihocoder 1441 : 后缀自动机一·基本概念
- hihoCoder #1403 : 后缀数组一·重复旋律
- hihoCoder #1415 : 后缀数组三·重复旋律3
- hihoCoder 1403 后缀数组 重复旋律
- 后缀数组 (hihocoder重复旋律系列)
- 后缀自动机 重复旋律 7 求所有不同的子串的值的总和
- hihoCoder 1407 后缀数组二·重复旋律2 && POJ 1743 Musical Theme(最长不可重叠重复子串问题)
- 后缀自动机·基本概念
- 后缀自动机
- centos7安装ssh服务
- Hibernate与MyBatis 的区别
- NKOJ 2993 (NOI 2014)动物园(KMP+栈)
- android通过sdk调不起微信原因
- Django数据库多对多数据关系
- hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
- SQL Server 2012 2016 2017 新增函数
- 491. Increasing Subsequences
- 随机森林参数调整
- C#222课的主要内容
- TextView设置文字竖着排放
- [Kafka]Monitor Kafka with jmxtrans
- C++中的虚函数表
- HYSBZ2565-最长双回文串