HYSBZ2565-最长双回文串
来源:互联网 发布:深圳压寨网络是培训么 编辑:程序博客网 时间:2024/06/07 01:04
最长双回文串
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2565 Solved: 1308
[Submit][Status][Discuss]
Description
顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
Input
一行由小写英文字母组成的字符串S。
Output
一行一个整数,表示最长双回文子串的长度。
Sample Input
baacaabbacabb
Sample Output
12
HINT
样例说明
从第二个字符开始的字符串aacaabbacabb可分为aacaa与bbacabb两部分,且两者都是回文串。
对于100%的数据,2≤|S|≤10^5
2015.4.25新加数据一组
Source
2012国家集训队Round 1 day2
解题思路:回文树,正反各建一次回文树即可
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <map>#include <set>#include <stack>#include <queue>#include <vector>#include <bitset>#include <functional>using namespace std;#define LL long longconst int INF = 0x3f3f3f3f;const int maxn = 3e5 + 10;char s[maxn];int x[maxn];struct PalindromicTree{const static int maxn = 3e5 + 10;int next[maxn][26], last, sz, tot;int fail[maxn], len[maxn];char s[maxn];void Clear(){len[1] = -1; len[2] = 0;fail[2] = fail[1] = 1;last = (sz = 3) - 1;tot = 0;memset(next[1], 0, sizeof(next[1]));memset(next[2], 0, sizeof(next[2]));}int Node(int length){memset(next[sz], 0, sizeof(next[sz]));len[sz] = length;return sz;}int getfail(int x){while (s[tot] != s[tot - len[x] - 1]) x = fail[x];return x;}int add(char pos){int x = (s[++tot] = pos) - 'a', y = getfail(last);if (next[y][x]) last = next[y][x];else{last = next[y][x] = Node(len[y] + 2);fail[sz] = len[sz] == 1 ? 2 : next[getfail(fail[y])][x];sz++;}return len[last];}}solve;int main(){while (~scanf("%s", s)){int len = strlen(s), ma = 0;solve.Clear();for (int i = 0; i < len; i++) x[i + 1] = solve.add(s[i]);solve.Clear();for (int i = len - 1; i >= 0; i--)ma = max(ma, x[i] + solve.add(s[i]));printf("%d\n", ma);}return 0;}
阅读全文
0 0
- HYSBZ2565-最长双回文串
- 最长双回文串
- Bzoj2565:最长双回文串:回文自动机
- bzoj2565: 最长双回文串
- 2565: 最长双回文串
- bzoj2565 最长双回文串
- 【BZOJ2565】最长双回文串
- bzoj2565 最长双回文串
- bzoj2565 最长双回文串
- 【bzoj2565】最长双回文串
- Jzoj2682 最长双回文串
- BZOJ 2565 最长双回文串(回文自动机)
- BZOJ2565 最长双回文串(回文树)
- 回文树 (tsinsen A1280. 最长双回文串)
- HYSBZ 2565 最长双回文串 (回文树)
- 回文树 BZOJ 2565 最长双回文串
- HYSBZ 2565 最长双回文串 回文树应用
- 【BZOJ2565】最长双回文串 Manacher
- 随机森林参数调整
- C#222课的主要内容
- TextView设置文字竖着排放
- [Kafka]Monitor Kafka with jmxtrans
- C++中的虚函数表
- HYSBZ2565-最长双回文串
- 装系统步骤
- Makefile框架
- [agc018f]Two Trees
- java8 Optional防止空指针异常初探
- 卡辛斯基的警告
- 《笨方法学python》习题43的学习笔记
- cx_oracle: UnicodeDecodeError:invalid continuation byte
- c语言顺序程序设计