[SAM] hihoCoder1445 后缀自动机二·重复旋律5
来源:互联网 发布:线正数据采集处理系统 编辑:程序博客网 时间:2024/05/22 09:39
题意
给出一个只含小写字母的串
题解
直接建出
实现的话可以在
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000005;struct node{ node *par,*ch[26]; int _max; node(int t1=0){ _max=t1; par=0; memset(ch,0,sizeof(ch)); } int cnt(){ return _max-par->_max; }} *root, *last;typedef node* P_node;long long ans;void Extend(char x){ P_node p=last, np=new node(p->_max+1); while(p&&p->ch[x]==0) p->ch[x]=np, p=p->par; if(!p) np->par=root; else{ P_node q=p->ch[x]; if(q->_max==p->_max+1) np->par=q; else{ P_node nq=new node(p->_max+1); memcpy(nq->ch,q->ch,sizeof(q->ch)); ans-=q->cnt(); //* nq->par=q->par; q->par=nq; np->par=nq; ans+=q->cnt()+nq->cnt(); //* while(p&&p->ch[x]==q) p->ch[x]=nq, p=p->par; } } ans+=np->cnt(); //* last=np;}char s[maxn];int n;int main(){ freopen("hiho1445.in","r",stdin); freopen("hiho1445.out","w",stdout); scanf("%s",s+1); n=strlen(s+1); root=last=new node(0); for(int i=1;i<=n;i++) Extend(s[i]-'a'); printf("%lld\n",ans); return 0;}
阅读全文
0 0
- [SAM] hihoCoder1445 后缀自动机二·重复旋律5
- hihocoder #1445 : 后缀自动机二·重复旋律5
- hihocoder 1445 : 后缀自动机二·重复旋律5(后缀自动机)
- 后缀数组二·重复旋律2
- hihoCoder #1407 : 后缀数组二·重复旋律2
- 后缀自动机 重复旋律 5(求所有本质不同的子串)
- 后缀数组一·重复旋律
- 后缀数组三·重复旋律3
- 后缀数组四·重复旋律4
- 后缀自动机 重复旋律 6(长度为K的旋律中出现次数最多的旋律的出现次数)
- Hiho 121 后缀数组二·重复旋律2(最长不可重叠重复子串问题)
- [SAM]后缀自动机
- 后缀自动机SAM
- Sam后缀自动机模板
- 后缀自动机SAM
- 后缀自动机SAM
- 后缀自动机(SAM)
- hiho一下 第121周后缀数组二·重复旋律2
- Java多线程【二】
- HDU6035-Colorful Tree 补集思想+树形DP
- 二十一天
- String &&StringBuilder&&StringBuffer
- Java API操作ZK node
- [SAM] hihoCoder1445 后缀自动机二·重复旋律5
- vb.net 教程 12-3 HtmlElement类 2
- 如何使用生成器函数实现可迭代对象
- Servlet中监听器
- C#系类之Lambda表达式
- Struts2(二)-Struts2之参数绑定和拦截器
- 使用FFmpeg的各种重要事项
- STM32F103mini教程学习总结与心得(三)---->中断
- android_解析json