Manacher
HDU 3068 Manacher裸题
#include <cstdio>
#include <cstring>
const int Maxn=;
char Str[Maxn<<],STR[Maxn<<];
int Len,x,P[Maxn<<],Id,Mx;
inline int Max(int x,int y) {return x>y?x:y;}
inline int Min(int x,int y) {return x>y?y:x;}
inline Init()
{
Len=strlen(Str+);
for (int i=;i<=Len;i++) STR[i]=Str[i];
Str[]='$'; Str[]='#';
for (int i=;i<=Len;i++) Str[i<<]=STR[i],Str[i<<|]='#';
Len=Len<<|; Id=;Mx=;
}
inline int Manacher()
{
for (int i=;i<=Len;i++)
{
if (Mx>i) P[i]=Min(P[*Id-i],Mx-i); else P[i]=;
while (Str[i+P[i]]==Str[i-P[i]]) P[i]++;
if (i+P[i]>Mx) Mx=P[i]+i,Id=i;
}
int Ret=;
for (int i=;i<=Len;i++) Ret=Max(Ret,P[i]);
return Ret-;
}
int main()
{
while (scanf("%s",Str+)!=EOF)
{
Init();
printf("%d\n",Manacher());
}
return ;
}
C++
BZOJ 3790 线段求交
用Manacher把最大的回文半径求出然后线段求交即可
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
#define mp make_pair
#define pb push_back
#define PA pair<int,int>
#define fi first
#define se second
using namespace std;
const int Maxn=;
const int Inf=0x3f3f3f3f;
char S[Maxn],Str[Maxn];
int P[Maxn],c[Maxn];
int Len;
vector<PA> Line;
inline int Min(int x,int y) {return x>y?y:x;}
inline int lowbit(int x) {return x&-x;}
inline int Query(int x)
{
if (x==) return ;
int Ret=Inf;
for (int i=x;i<=Len;i+=lowbit(i)) Ret=Min(Ret,c[i]);
return Ret;
}
inline void Update(int x,int y)
{
for (int i=x;i;i-=lowbit(i)) c[i]=Min(c[i],y);
}
inline void Manacher()
{
int m=Len<<|;
for (int i=;i<=Len;i++)
{
S[i<<]=Str[i];
S[i<<|]='#';
}
S[]='#'; S[]='&'; S[m+]='^';
int Mx=,Id=;
for (int i=;i<=m;i++)
{
if (i<Mx) P[i]=Min(Mx-i,P[*Id-i]); else P[i]=;
while (S[i-P[i]]==S[i+P[i]]) P[i]++;
if (i+P[i]>Mx) Mx=i+P[i],Id=i;
int l=(i-P[i])/+,r=(i+P[i])/-;
if (l<=r) Line.pb(mp(r,l));
}
}
int main()
{
while (scanf("%s",Str+)!=EOF)
{
Len=strlen(Str+); Line.clear();
Manacher();
sort(Line.begin(),Line.end());
for (int i=;i<=Len;i++) c[i]=Inf;
int Ans=Inf;
for (int i=;i<Line.size();i++)
{
int x=Query(Line[i].se-)+;
Update(Line[i].fi,x);
if (Line[i].fi==Len) Ans=Min(Ans,x);
}
printf("%d\n",Ans-);
}
return ;
}
C++
Manacher的更多相关文章
- HDU3068 回文串 Manacher算法
好久没有刷题了,虽然参加过ACM,但是始终没有融会贯通,没有学个彻底.我干啥都是半吊子,一瓶子不满半瓶子晃荡. 就连简单的Manacher算法我也没有刷过,常常为岁月蹉跎而感到后悔. 问题描述 给定一 ...
- manacher算法专题
一.模板 算法解析:http://www.felix021.com/blog/read.php?2040 *主要用来解决一个字符串中最长回文串的长度,在O(n)时间内,线性复杂度下,求出以每个字符串为 ...
- BZOJ2342 Manacher + set
题一:别人介绍的一道题,题意是给出一个序列,我们要求出一段最常的连续子序列,满足:该子序列能够被平分为三段,第一段和第二段形成回文串,第二段和第三段形成回文串. 题二:BZOJ2342和这题非常的相似 ...
- lintcode最长回文子串(Manacher算法)
题目来自lintcode, 链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/ 最长回文子串 给出一个字符串 ...
- Manacher's algorithm
Manacher's algorithm 以\(O(n)\)的线性时间求一个字符串的最大回文子串. 1. 预处理 一个最棘手的问题是需要考虑最长回文子串的长度为奇数和偶数的情况.我们通过在任意两个字符 ...
- 1089 最长回文子串 V2(Manacher算法)
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa ...
- Manacher's Algorithm 马拉车算法
这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...
- 51nod1089(最长回文子串之manacher算法)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 题意:中文题诶~ 思路: 我前面做的那道回文子串的题 ...
- HDU - 3948 后缀数组+Manacher
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3948 题意:给定一个字符串,求字符串本质不同的回文子串个数. 思路:主要参考该篇解题报告 先按照man ...
- LeetCode 5 Longest Palindromic Substring manacher算法,最长回文子序列,string.substr(start,len) 难度:2
https://leetcode.com/problems/longest-palindromic-substring/ manacher算法相关:http://blog.csdn.net/ywhor ...
随机推荐
- (转) CCTextFieldTTF输入框
CCTextFieldTTF输入框 分类: cocos2d-x 2013-04-08 16:32 2964人阅读 评论(1) 收藏 举报 新建工程,testInput 修改HelloWorldScen ...
- Bootstrap_按钮工具栏
单个按钮在Web页面中的运用有时候并不能满足我们的业务需求,常常会看到将多个按钮组合在一起使用,比如富文本编辑器里的一组小图标按钮等. Bootstrap框架为大家提供了按钮组组件. <div ...
- 分享 - 最初的JDBC操作步骤
/* * 1. 注册 */ // 装载注册 SQLServer Driver Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDri ...
- struts的hello world小试
struts的hello world小试 前面jdk的安装和配置,tomcat的安装和配置以及java ide的安装和配置就不写了. 在项目中使用流程 创建一个Web项目 导如struts 2.0.1 ...
- 推荐流程设计器http://www.processon.com/
以前一直用的Rational Rose进行类图,流程设计,最近发现了ProcessOn使用了下,感觉很好用,相比rose 1.有中文说明,rose全专业英文,理解起来比较费劲: 2.直线比较直,ros ...
- 开启curl扩展(转)
一.win7系统32位, apache2.2, php5.2升级到5.4. 这个比较容易: 1. phpinfo发现没有加载curl; 2. 在php.ini中设置extension_dir 指向e: ...
- 学习mongo系列(九)索引,聚合,复制(副本集),分片
一.索引 二.聚合 三.复制(副本集) 四.分片 尚未实践操作. 详见http://www.runoob.com/mongodb/mongodb-indexing.html
- MFC编程入门之九(对话框:为控件添加消息处理函数)
这一节讲的主要内容是如何为控件添加消息处理函数. MFC为对话框和控件定义了诸多消息,我们对他们操作时会触发消息,这些消息最终由消息处理函数处理,比如我们点击按钮时就会产生BN_CLICKED消息,修 ...
- laravel多国语言包
https://packagist.org/packages/caouecs/laravel-lang 例如安装中文语言包 则下载 zh-CN 拷贝文件到 resouces/lang 下 然后修改co ...
- D3.js 更自由的条形图
一.添加一个矩形 //Width and height var w = 500; var h = 100; var dataset = [ 5, 10, 13, 19, 21, 25, 22, 18, ...