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 ...
随机推荐
- 上传预览图片自己做的.md
1.无插件预览(window.URL.createObjectURL) ```javascript //demo 图片预览 单个 $(".demo input#demo_file" ...
- asp.net 之 购物车
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- window resize的时候禁止频繁触发事件
$(window).resize(function(){ var value=+new Date; assistantForSyncTask.execute(value); assistantForA ...
- 浙江理工2015.12校赛-A
孙壕请一盘青岛大虾呗 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 577 Solved: 244 Description 话说那一年zstu与gdut ...
- MQ框架的比较
MQ框架的比较 MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据 ...
- NRF52832学习笔记
一.打印函数 printf("");用于在调试串口时在电脑端的串口调试工具上打印: 宏定义时每行后面的斜杠,在最后一行不加斜杠.
- 登录锁定状态下Win7关机技巧总结
登录锁定状态下Win7关机技巧总结 一般在锁定状态都是有个关闭电脑的图标的.但是如果你的系统没有,那么怎么样关机呢,所谓的锁定状态通常是指电脑在登录界面,具体的实现如下,感兴趣的朋友可以参考下 现在大 ...
- EasyUI关于 numberbox,combobox,validatebox 的几个小问题
在最近的项目中,首次使用到了 网页的一个布局框架——EasyUI,感觉这个框架特别牛,兼容性很不错,页面效果也挺不错,可是在使用标题上三个控件过程中遇到几个很奇特的问题,让我头疼不已,所以在此给广大I ...
- [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序读取相关数据
这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第七篇:为ASP.NET MVC应用程序 ...
- django admin下拉列表不显示值,显示为object的处理
问题:模板中创建form表单中的下拉列表, 前台打开页面显示object,而不是值,如图: 尝试了多种办法无果,最后解决了,处理办法是修改models.py,原来的model: class Techn ...