2565: 最长双回文串 - BZOJ
Description
顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
输入长度为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两部分,且两者都是回文串。
数据规模及限制
对于10%的数据,2≤|S|≤10^3。
对于30%的数据,2≤|S|≤10^4。
对于100%的数据,2≤|S|≤10^5。
其实很简单
我们先用manacher算法求出以每个点为中心的最长回文串
然后求出l[i]和r[i],分别表示向前和向后的最远的 回文串能覆盖到i 的中心(当然i是manacher算法里面加入的‘#’)因为只有这个才可以做分割点
const
maxn=;
var
c:array[..maxn]of char;
p,ll,rr:array[..maxn]of longint;
n:longint; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; procedure init;
var
i,id,r:longint;
begin
n:=;
while not eoln do
begin
inc(n);
read(c[n]);
inc(n);
end;
c[]:='$';
c[n+]:='#';
id:=;
r:=;
for i:= to n do
begin
if r>=i then p[i]:=min(p[id<<-i],r-i+)
else p[i]:=;
while c[i+p[i]]=c[i-p[i]] do
inc(p[i]);
if i+p[i]->r then
begin
id:=i;
r:=i+p[i]-;
end;
end;
end; procedure work;
var
i,k,ans:longint;
begin
k:=;
for i:= to n do
if i and = then
begin
while k+p[k]-<i do
inc(k);
ll[i]:=i-k;
end;
k:=n;
for i:=n downto do
if i and = then
begin
while k-p[k]+>i do
dec(k);
rr[i]:=k-i;
end;
ans:=;
for i:= to n do
if i and = then ans:=max(ans,ll[i]+rr[i]);
writeln(ans);
end; begin
init;
work;
end.
2565: 最长双回文串 - BZOJ的更多相关文章
- BZOJ 2565: 最长双回文串 [Manacher]
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1842 Solved: 935[Submit][Status][Discu ...
- bzoj 2565: 最长双回文串 manacher算法
2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...
- HYSBZ 2565 最长双回文串 (回文树)
2565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1377 Solved: 714 [Submit][Status][Dis ...
- BZOJ 2565 最长双回文串(manacher)
565: 最长双回文串 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3343 Solved: 1692[Submit][Status][Discu ...
- Manacher || P4555 [国家集训队]最长双回文串 || BZOJ 2565: 最长双回文串
题面:P4555 [国家集训队]最长双回文串 题解:就.就考察马拉车的理解 在原始马拉车的基础上多维护个P[i].Q[i]数组,分别表示以i结尾最长回文子串的长度和以i开头的最长回文子串的长度 然后就 ...
- bzoj 2565: 最长双回文串
Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同).输入 ...
- bzoj 2565: 最长双回文串 回文自动机
题目: Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同 ...
- BZOJ 2565 最长双回文串(回文自动机)
题意 给一个长度为N的字符串S.对于一个字符串AB,如果A和B都是回文串,那么称AB是一个双回文串.求问S最长双回文子串的长度?N <= 100000 题解 正反双向构造回文自动机,得到某一个点 ...
- 【BZOJ】2565: 最长双回文串
[题意]给定小写字母字符串s,求最长的 [ 可以分成左右两个回文串的 ] 子串,n<=10^5. [算法]回文树 [题解]对于每个字符x,处理出以x结尾的最长回文串,以x开头的最长回文串,然后枚 ...
随机推荐
- iOS UIView常用方法和属性
UIView常用方法 addSubView: // 添加子视图 insertSubview: atIndex // 视图插入到指定索引位置 insertSubview:aboveSubview: // ...
- Python Opearte MS-SQL Use Pymssql
看到很多的开源数据库会用到MySQL,Python同样也使用,但是我已经习惯使用图形化界面,操作感极强的MS-SQL 看到Python也提供MS-SQL连接方式,需要用到PyMssql. 在Windo ...
- server——小记
问题 Step 1 Start the server in Directory Services Restore Mode Windows Server 2003/2008 Directory ...
- js选中下拉框的默认选项
//这是修改时选中 $("#type").find("option[value='"+factory+"']").attr("se ...
- (转)RabbitMQ消息队列(二):”Hello, World“
本文将使用Python(pika 0.9.8)实现从Producer到Consumer传递数据”Hello, World“. 首先复习一下上篇所学:RabbitMQ实现了AMQP定义的消息队列.它实现 ...
- 洛谷 P1428 小鱼比可爱
题目描述 人比人,气死人:鱼比鱼,难死鱼.小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度.参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然 ...
- VIM中的寄存器简介
原来在vim粘贴从其他地方复制过来的文本的时候,一直用的shift + inert,那时就想,能不能够直接就像p那样粘贴,不必非得进入插入模式再来粘贴.后来看了<vim实用技巧>上关于vi ...
- Spring.Net的Ioc功能基本配置
Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及ASP.NET扩展等等. Spri ...
- Silverlight中弹出网页
System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(), “_blank”,"fullscreen=yes,channelmode ...
- 关于ionic的跨域问题
例如你的api原地址请求是 http://10.100.100.100:8080/service/, 1.那么你应该在项目内api请求改成 /service/, 注意红色部分是ionic serve ...