poj3974 Palindrome(Manacher最长回文)
之前用字符串hash+二分过了,今天刚看了manacher拿来试一试。
这manacher也快太多了%%%

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int maxn = 1e6 + ;
char s[maxn], tmp[*maxn];
int p[maxn*], id, mx, ans;
inline void manacher(){
mx = id = ans = ;
memset( p, , sizeof(p) );
for( int i=; tmp[i]; i++ ){
p[i] = mx>i ? min(p[*id-i], mx-i):; //因为i >= id 所以找其在左侧已经求出的对称点2*id-1
while( tmp[i+p[i]]==tmp[i-p[i]] ) p[i]++;
if( mx<i+p[i] ){
mx = i+p[i];
id = i;
}
}
for( int i=; tmp[i]; i++ )
if( ans<p[i] ) ans = p[i];
} int main(){
int kase = ;
while( ~scanf("%s", s+) && s[]!='E' ){
int len = strlen(s+);
tmp[] = '$';
int j = ;
for( int i=; i<=len; i++, j+= ){
tmp[j+] = tmp[j-] = '#';
tmp[j] = s[i];
}
tmp[j+] = ;
manacher();
printf("Case %d: %d\n", ++kase, ans-);
} return ;
}
/*
Sample Input abcbabcbabcba
abacacbaaaab
END
Sample Output Case 1: 13
Case 2: 6
*/
poj3974 Palindrome(Manacher最长回文)的更多相关文章
- POJ3974 Palindrome Manacher 最长回文子串模板
这道题可以$O(nlogn)$,当然也可以$O(n)$做啦$qwq$ $O(nlogn)$的思路是枚举每个回文中心,通过哈希预处理出前缀和后缀哈希值备用,然后二分回文串的长度,具体的就是判断在长度范围 ...
- Palindrome(最长回文串manacher算法)O(n)
Palindrome Time Limit:15000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 3974 Palindrome(最长回文子串)
题目链接:http://poj.org/problem?id=3974 题意:求一给定字符串最长回文子串的长度 思路:直接套模板manacher算法 code: #include <cstdio ...
- Ural 1297 Palindrome 【最长回文子串】
最长回文子串 相关资料: 1.暴力法 2.动态规划 3.中心扩展 4.Manacher法 http://blog.csdn.net/ywhorizen/article/details/6629268 ...
- Manacher 最长回文子串。
最长回文子串就是一个字符串的一个子串,他从左往右读和从右往左读是一样的. 可以用 Manacher 算法来求,他的复杂度是 O(n) . 可以看这篇文章 http://blog.csdn.net/yw ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
- HDU 3068 最长回文 (Manacher最长回文串)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- LeetCode 409. Longest Palindrome (最长回文)
Given a string which consists of lowercase or uppercase letters, find the length of the longest pali ...
随机推荐
- 【插件】【idea】的Mybatis Plugin插件方便mapper接口方法和mapper XML文件之间来回切换
效果 安装 这是2019.2版本的,旧版的有点不一样
- PHP扩展插件imagick使用笔记
PHP扩展插件ImageMagick使用笔记 imagick是一个PHP的扩展,用ImageMagick提供的API来进行图片的创建与修改,不过这些操作已经包装到扩展imagick中去了,最终调用的是 ...
- [Docker] - 不同容器之间相互访问的实现方式(例如:Client 访问 DB)
部署了两个独立的容器: Container #1 - Web ClientContainer #2 - SQL Server 不同容器间如何互访? 无法从 Container #1 访问到 Conta ...
- sqlserver 数据类型 C# clr 数据类型 映射
https://docs.microsoft.com/zh-cn/dotnet/framework/data/adonet/sql/linq/sql-clr-type-mapping#default- ...
- Html 对象的常用事件列举
事件名称 触发时间 对象例举 OnBlur 对象失去输入焦点 窗口和所有的表单对象 OnChange 用户改变对象的值 文本框.文本区域.选择列表等 OnClick 用户鼠标点击 链接.按钮.单选钮. ...
- 新安装jenkins要记录的点。
突然很早之前部署的jenkins 由于版本低存在漏洞,被人搞了,在docker中新安装jenkins出现了各种问题,避免跳坑. 不能正确安装插件, Jenkins -> Plugin Manag ...
- asp.net core 3.1 中Synchronous operations are disallowed. Call FlushAsync or set AllowSynchronousIO to true instead
在Action中解决措施: var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>(); if (syn ...
- 在windows服务中使用定时器
在windows服务中,利用winform中直接拖动timer控件的方式使用定时器是不可以的,启动服务后会发现定时器并没有执行.那么在windows服务中如何使用定时器呢? 不使用直接拖动控件的方式 ...
- kubernetes使用securityContext和sysctl
前言 在运行一个容器时,有时候需要使用sysctl修改内核参数,比如net..vm..kernel等,sysctl需要容器拥有超级权限,容器启动时加上--privileged参数即可.那么,在kube ...
- 使用@Async注解创建多线程,自定义线程池
说明 使用@Async注解创建多线程非常的方便,还可以通过配置,实现线程池.比直接使用线程池简单太多.而且在使用上跟普通方法没什么区别,加上个@Async注解即可实现异步调用. 用法 AsyncTas ...