【Manacher算法】poj3974 Palindrome
Manacher算法教程:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
char b[],a[];
char tmp[];
int n,f[],zu;//f[i]表示插入一堆#后,以i为中心的最长回文子串の半径长度,
//故其减1后就是原串的最长回文子串的答案
//也是原串中以i为开端的最长回文串の长度。
int id,maxid,ans;
int main()
{
while()
{
scanf("%s",tmp);
if(tmp[]=='E')
break;
zu++;
n=strlen(tmp);
memset(b,,sizeof(b));
memset(a,,sizeof(a));
memset(f,,sizeof(f));
ans=id=maxid=;
for(int i=;i<=n;i++)
b[i]=tmp[i-];
a[]='#';
for(int i=;i<=n;i++)
{
a[i<<]=b[i];
a[i<<|]='#';
}
a[]='-';
a[(n+)<<]='+';
n=n<<|;
f[]=;
id=;//用id这个变量记下取得这个最优maxid时的id值
//即右端扩展到maxid+1时,该回文串中心的位置
maxid=;//maxid是曾经扫描到的回文串中,匹配到的最远的位置+1
for(int i=;i<=n;i++)
{
if(maxid>i)//算法核心:防止重复匹配
f[i]=min(f[(id<<)-i]//以 关于id的对称点 为中心的的最长回文串长
//因为,分别在id两侧的两半回文串是完全一样的
,maxid-i // 但是,以id的对称点为中心的最长回文串有可能超出
//以id为中心的最长回文串的范围,所以,限制其无法超出
//此范围
); //(id<<1)-i 为 i 关于 id 的对称点
else
f[i]=;//否则f[i]=1
for(;a[i+f[i]]==a[i-f[i]];f[i]++);
ans=max(ans,f[i]-);
if(f[i]+i>maxid)//注意是f[i]+i,不是f[i]+i-1,因为maxid是匹配到的最远位置+1
{
maxid=f[i]+i;
id=i;//若以i为中心时,回文串可以扩展到更远的地方,更新id
}
}
printf("Case %d: %d\n",zu,ans);
} return ;
}
【Manacher算法】poj3974 Palindrome的更多相关文章
- Palindrome(poj3974)(manacher算法)
http://poj.org/problem?id=3974 Palindrome Time Limit: 15000MSMemory Limit: 65536K Total Submissions: ...
- POJ3974 Palindrome (manacher算法)
题目大意就是说在给定的字符串里找出一个长度最大的回文子串. 才开始接触到manacher,不过这个算法的确很强大,这里转载了一篇有关manacher算法的讲解,可以去看看:地址 神器: #includ ...
- Palindrome(最长回文串manacher算法)O(n)
Palindrome Time Limit:15000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp
题目链接: http://codeforces.com/problemset/problem/7/D D. Palindrome Degree time limit per test1 secondm ...
- 利用Manacher算法寻找字符串中的最长回文序列(palindrome)
寻找字符串中的最长回文序列和所有回文序列(正向和反向一样的序列,如aba,abba等)算是挺早以前提出的算法问题了,最近再刷Leetcode算法题的时候遇到了一个(题目),所以就顺便写下. 如果用正反 ...
- POJ 3974 Palindrome 字符串 Manacher算法
http://poj.org/problem?id=3974 模板题,Manacher算法主要利用了已匹配回文串的对称性,对前面已匹配的回文串进行利用,使时间复杂度从O(n^2)变为O(n). htt ...
- POJ3974 Palindrome Manacher 最长回文子串模板
这道题可以$O(nlogn)$,当然也可以$O(n)$做啦$qwq$ $O(nlogn)$的思路是枚举每个回文中心,通过哈希预处理出前缀和后缀哈希值备用,然后二分回文串的长度,具体的就是判断在长度范围 ...
- POJ----(3974 )Palindrome [最长回文串]
Time Limit: 15000MS Memory Limit: 65536K Total Submissions: 5121 Accepted: 1834 Description Andy ...
- hdu 3068 最长回文 manacher算法(视频)
感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接:戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大. manacher算法把所有的回文都变 ...
随机推荐
- C题 hdu 1408 盐水的故事
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 盐水的故事 Time Limit: 2000/1000 MS (Java/Others) ...
- document.onclick在ios上不触发的解决方法与touchstart点击穿透处理
document.onclick = function (e) { var e = e ? e : window.event; var tar = e.srcElement || e.target; ...
- linux dpm机制分析(上)【转】
转自:http://blog.csdn.net/lixiaojie1012/article/details/23707681 1 DPM介绍 1.1 Dpm: 设备电源管理, ...
- PHP-5.3.27源码安装及nginx-fastcgi配置
源码安装php cat /etc/redhat-release uname -rm wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.c ...
- apusic7配置2
1:<SERVICE class="com.apusic.web.WebService" > <ATTRIBUTE NAME="MaxWaitingCl ...
- mac系统安装mysql
1.下载 打开官网:https://www.mysql.com 进入DOWNLOADS--->Community--->MySQL Community Server--->DOWNL ...
- eclipse 配置jsp
1.安装jdk和jre 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...
- JVM内存分配与回收
1.内存分配与回收策略 内存自动管理:自动化的解决了对象内存分配和回收对象内存的问题. 一般在堆上分配对象,也可能经过JTI编译后间接在栈上分配. 主要分配在新生代的Eden区,如果启动了本地线程分配 ...
- node-session
session cookie 虽然很方便,但是使用 cookie 有一个很大的弊端,cookie 中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能存放在 cookie 中 ...
- DevExpress控件-GridControl根据条件改变单元格(Dev GridControl 单元格着色)
DevExpress控件-GridControl根据条件改变单元格颜色,如下图: 解决办法:可以参考:http://www.cnblogs.com/zeroone/p/4311191.html 第一步 ...