[APIO2010] 回文串 - 回文自动机
经典题吧

我觉得我要换个板子,这结构体板子真TM不顺手
#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
struct PAM_Trie {
int ch[26];
int fail, len, cnt;
};
struct PAM {
PAM_Trie b[N];
int n, last, cnt, s[N];
PAM() {
b[0].len = 0;
b[1].len = -1;
b[0].fail = 1;
b[1].fail = 0;
last = 0;
cnt = 1;
}
int get_fail(int x) {
while(s[n - b[x].len - 1] != s[n]) {
x = b[x].fail;
}
return x;
}
void insert(char ch) {
s[++n]=ch;
int p = get_fail(last);
if(!b[p].ch[s[n]]) {
b[++cnt].len = b[p].len + 2;
int tmp = get_fail(b[p].fail);
b[cnt].fail = b[tmp].ch[s[n]];
b[p].ch[s[n]] = cnt;
}
last = b[p].ch[s[n]];
b[last].cnt++;
}
} P;
int length;
char c[N];
int main() {
scanf("%s", c + 1);
length = strlen(c + 1);
int k=0;
P.s[0]=26;
for(int i=1;i<=length;i++) {
P.insert(c[i]-'a');
}
long long mx=0;
for(int i=P.cnt;i>=1;--i) {
P.b[P.b[i].fail].cnt += P.b[i].cnt;
mx=max(mx, (long long)P.b[i].len * P.b[i].cnt);
}
cout<<mx<<endl;
}
[APIO2010] 回文串 - 回文自动机的更多相关文章
- 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)
传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...
- bzoj 2565: 最长双回文串 回文自动机
题目: Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同 ...
- 【bzoj3676】[Apio2014]回文串 回文自动机
题目描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最大出现值. 输入 输入只有一行,为一个只包含小写字母( ...
- [Bzoj3676][Apio2014]回文串(后缀自动机)(parent树)(倍增)
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 3396 Solved: 1568[Submit][Statu ...
- 【bzoj3676】[Apio2014]回文串 —— 回文自动机的学习
写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文 ...
- hysbz3676 回文串 回文自动机
回文自动机模板题 头铁了一下午hdu6599,最后发现自己的板有问题 先放这里一个正确性得到基本确认的板,过两天肝hdu6599 #pragma GCC optimize(2) #include< ...
- bzoj 3676: [Apio2014]回文串 回文自动机
3676: [Apio2014]回文串 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 844 Solved: 331[Submit][Status] ...
- BZOJ3676[Apio2014]回文串——回文自动机
题目描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. 输入 输入只有一行,为一个只包含小写字 ...
- [bzoj3676][Apio2014]回文串——Manacher+后缀自动机+倍增
Brief Description 一个回文串的value定义为这个回文串的长度乘以出现次数.给定一个字符串,求\(value_{max}\). Algorithm Design 我们使用Manach ...
- HYSBZ 2565 最长双回文串 (回文树)
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1377 Solved: 714 [Submit][Status][Dis ...
随机推荐
- MySQL之ERROR 1558 (HY000): Column count of mysql.user is wrong.解决方案
一.场景 我本想在MySQL5.7上执行下列语句创建一个新用户: CREATE USER "remote"@"%" IDENTIFIED BY "12 ...
- 高精度模板 支持各种运算 c++
绪言 自从有了高精度模板,妈妈再也不用怕我不会打高精度了! 代码 代码长度与日俱增啊~~~ #include<iostream> #include<cstring> #incl ...
- c 指针改变数字
之前已经有了: gcc -c day4.c -Wall gcc -o day4.exe day4.o 所以才会有以下结果
- junit 运行(eclipse + IDEA)
记得刚用IDEA 开发的时候, 什么都还不熟,以为junit 运行还跟eclipse 一样, 结果试了后才知道是不一样的. 现在刚好写junit 相关的,也就都记录下来吧 Eclipse:eclip ...
- 【第三篇】C#调用lua文件
获取一个全局基本数据类型 使用LuaEnv.Global.Get<T>("name")就可以 var str = luaEnv.Global.Get<string ...
- .net core 3.0一个记录request和respose的中间件
参考资料 https://www.cnblogs.com/wybin6412/p/10944077.html RequestResponseLog.cs using System; using Sys ...
- UTF-8(bom-non)
Public Sub WriteUTF_8BomNon(ByVal fileName As String, ByVal strLine As String) Dim stream: Set strea ...
- 剑指offer-面试题39-数组中出现次数超过一半的数字-抵消法
/* 题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输 ...
- vscode侧边栏字体大小修改
1.找到安装路径下,workbench.desktop.main.css 文件 C:\z_my_install\Microsoft VS Code\resources\app\out\vs\workb ...
- PHP OOP
<?php //1. Class and object /* object-oriented concept an object can be almost any items or conce ...