HYSBZ 3676 回文串 (回文树)
来源:互联网 发布:工作淘宝客服怎么样 编辑:程序博客网 时间:2024/06/06 03:16
3676: [Apio2014]回文串
Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1680 Solved: 707
[Submit][Status][Discuss]
Description
考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出
现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最
大出现值。
Input
输入只有一行,为一个只包含小写字母(a -z)的非空字符串s。
Output
输出一个整数,为逝查回文子串的最大出现值。
Sample Input
【样例输入l】
abacaba
【样例输入2]
www
abacaba
【样例输入2]
www
Sample Output
【样例输出l】
7
【样例输出2]
4
7
【样例输出2]
4
回文树模板题
#include <iostream>#include <string.h>#include <algorithm>#include <math.h>#include <stdio.h>#include <stdlib.h>using namespace std;typedef long long int LL;const int maxn=3e5+10;char str[maxn];struct Tree{ int next[maxn][26]; int fail[maxn]; int num[maxn]; LL cnt[maxn]; int len[maxn]; int s[maxn]; int p; int n; int last; int new_node(int x) { memset(next[p],0,sizeof(next[p])); cnt[p]=0; num[p]=0; len[p]=x; return p++; } void init() { p=0; new_node(0); new_node(-1); last=0;n=0; s[0]=-1; fail[0]=1; } int get_fail(int x) { while(s[n-len[x]-1]!=s[n]) x=fail[x]; return x; } int add(int x) { x-='a'; s[++n]=x; int cur=get_fail(last); if(!(last=next[cur][x])) { int now=new_node(len[cur]+2); fail[now]=next[get_fail(fail[cur])][x]; next[cur][x]=now; num[now]=num[fail[now]]+1; last=now; } cnt[last]++; } void count() { for(int i=p-1;i>=0;i--) cnt[fail[i]]+=cnt[i]; }}tree;int main(){ while(scanf("%s",str)!=EOF) { int len=strlen(str); tree.init(); for(int i=0;i<len;i++) tree.add(str[i]); tree.count(); LL ans=0; for(int i=2;i<tree.p;i++) ans=max(ans,(LL)tree.cnt[i]*tree.len[i]); printf("%lld\n",ans); } return 0;}
0 0
- HYSBZ 3676 回文串 (回文树)
- HYSBZ 3676 回文串
- HYSBZ 2565 最长双回文串 (回文树)
- HYSBZ 2565 最长双回文串 回文树应用
- HYSBZ 2565 最长双回文串
- HYSBZ 2342 最长双倍回文串 Manacher
- HYSBZ - 2565 最长双回文串 Manacher
- HYSBZ 2160 拉拉队排练(回文树)
- 双倍回文 HYSBZ
- 【BZOJ 3676】 [Apio2014]回文串 回文树
- bzoj3676 回文串 回文树
- bzoj3676 回文串【回文树】
- [bzoj3676][Apio2014]回文串 回文自动机(回文树)
- BZOJ 3676 Apio2014 回文串 回文自动机
- BZOJ 3676 [Apio2014]回文串 回文自动机
- BZOJ 3676: [Apio2014]回文串 回文自动机
- [BZOJ]3676: [Apio2014]回文串 回文自动机
- [BZOJ]3676 [APIO2014] 回文串 回文自动机
- 【代码笔记】iOS-平面化的饼图
- gcd学习理解(二)
- Oracle 11g笔记——临时表
- Android 历代SDK昵称和特点
- Oracle 11g笔记——分区表
- HYSBZ 3676 回文串 (回文树)
- 深度学习-OCR-数据库
- sort排序
- 奋斗吧,程序员——第三十三章 今朝此为别,何处还相遇
- Oracle 11g笔记——聚簇
- axis2 webservice 调用的三种方式
- 获取一个文件夹下所有文件的大小
- Oracle 11g笔记——索引组织表
- 图像处理图库