HDU 5340——Three Palindromes——————【manacher处理回文串】
Three Palindromes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1244 Accepted Submission(s): 415
For each test case , there is an single line contains a string S which only consist of lowercase English letters.1≤|s|≤20000
abc
abaadada
No

#include<bits/stdc++.h>
using namespace std;
#define min(a,b) ((a)<(b)?(a):(b))
const int maxn=20200;
int pre[maxn*2],suf[maxn*2];
int p[maxn*2];
char str[maxn],trans[maxn*2];
int Transform(){
// memset(p,0,sizeof(p));
memset(pre,0,sizeof(pre));
memset(suf,0,sizeof(suf));
int len=strlen(str);
trans[0]='$';
for(int i=1;i<=2*len;i+=2){
trans[i]='#';
trans[i+1]=str[i/2];
}
trans[2*len+1]='#';
trans[2*len+2]='@';
return 2*len+1;
}
int manacher(){
int len=Transform();
int mx=0,pos=0;
for(int i=1;i<=len;i++){
if(i<mx){
p[i]=min(p[2*pos-i],mx-i);
}else{
p[i]=1;
}
for(;trans[i+p[i]]==trans[i-p[i]];p[i]++);
if(mx<i+p[i]){
mx=i+p[i];
pos=i;
}
}
return len;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%s",str);
int lens=strlen(str);
if(lens<3){
printf("No\n");continue;
}else if(lens==3){
printf("Yes\n");continue;
}else{
int len= manacher();
for(int i=2;i<len;i++){
if(p[i]==i){
pre[i+p[i]-1]=1;
}
if(p[i]==len-i+1){
suf[i-p[i]+1]=1;
}
}
int flag=0;
for(int i=2;i<len&&(!flag);i++){
for(int j=1;j<p[i]&&(!flag);j++){
if(pre[i-j]&suf[i+j]){
flag=1;
printf("Yes\n");
}
}
}
if(!flag){
printf("No\n");
}
}
}
return 0;
}


HDU 5340——Three Palindromes——————【manacher处理回文串】的更多相关文章
- Girls' research - HDU 3294 (Manacher处理回文串)
题目大意:给以一个字符串,求出来这个字符串的最长回文串,不过这个字符串不是原串,而是转换过的,转换的原则就是先给一个字符 例如 'b' 意思就是字符把字符b转换成字符 a,那么c->b, d-& ...
- hdu 3294 manacher 求回文串
感谢: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/ O(n)求给定字符串的以每个位置为中心的回文串长度. 中心思想:每次计算位 ...
- manacher算法——回文串计算的高效算法
manacher算法的由来不再赘述,自行百度QWQ... 进入正题,manacher算法是一个高效的计算回文串的算法,回文串如果不知道可以给出一个例子:" noon ",这样应该就 ...
- HDU 5371 Hotaru's problem (Manacher,回文串)
题意:给一个序列,找出1个连续子序列,将其平分成前,中,后等长的3段子序列,要求[前]和[中]是回文,[中]和[后]是回文.求3段最长为多少?由于平分的关系,所以答案应该是3的倍数. 思路:先Mana ...
- HDU 5677 ztr loves substring(回文串加多重背包)
ztr loves substring Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
- HDU - 5340 Three Palindromes(manacher算法)
http://acm.hdu.edu.cn/showproblem.php?pid=5340 题意 判断是否能将字符串S分成三段非空回文串 分析 manacher预处理出前缀和后缀回文的位置, 枚举第 ...
- 【SPOJ】NUMOFPAL - Number of Palindromes(Manacher,回文树)
[SPOJ]NUMOFPAL - Number of Palindromes(Manacher,回文树) 题面 洛谷 求一个串中包含几个回文串 题解 Manacher傻逼题 只是用回文树写写而已.. ...
- HDU 3613 Best Reward(manacher求前、后缀回文串)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目大意: 题目大意就是将字符串s分成两部分子串,若子串是回文串则需计算价值,否则价值为0,求分 ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
随机推荐
- c#百分比计算
//此方法得到的百分比后小数太多,不行double percent=Convert.ToDouble(2)/Convert.ToDouble(34); string result=(percent*1 ...
- 用递归算法返回该元素id下面的所有子集id
private List<int> listAreaId = new List<int>(); /// <summary> /// 递归获取本区域下面的所有子集 / ...
- 深入解读Job system(2)
https://mp.weixin.qq.com/s/vV4kqorvMtddjrrjmOxQKg 上一篇文章中,我们讲解了Job System的基础知识,本文将以网格变形项目为示例,讲解Job Sy ...
- AJAX使用四步曲
前言 AJAX这个东西还是很模糊的,下面会对AJAX这个技术进行详细讲解一些,另外,在网上商城中应用到了,使用它有四个步骤,下面详细介绍一些. 内容 定义: AJAX=异步JavaScript和XML ...
- Linux之Vim编辑器的使用
NAME vim - Vi IMproved, a programmers text editor #vi的改进,一个程序文本编辑器 1.移动光标的方法 Ctrl+f 屏幕向下移动一页 0(数字0) ...
- springboot添加第三方的jar或本地jar
原文链接:https://www.cnblogs.com/fengli9998/p/8044923.html 由对接支付引入第三方的jar时冒出的问题,如何在springboot项目中来引入第三方的j ...
- select和epoll原理和区别
对于select和poll,其主要原理跟epoll不同 poll和select的共同点就是,对全部指定设备(fd)都做一次poll,当然这往往都是还没有就绪的,那就会通过回调函数把当前进程注册到设备的 ...
- 利用zookeeper生成唯一id
package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; import java.util.concu ...
- Hibernate上传数据到数据库,从数据库读取数据到本地模板代码
1.Hibernate上传数据到数据库: //创建一个session对象 Session session1=HibernateTools.getSession(); //Fenciresult数据库表 ...
- Go语言基础之16--Mysql基本操作
一.Mysql驱动及数据库连接 1.1 Golang中的Mysql驱动 A. https://github.com/go-sql-driver/mysql B. Go本身不提供具体数据库驱动,只提供驱 ...