【 HDU3294 】Girls' research (Manacher)
BUPT2017 wintertraining(15) #5F
题意
给定字母x,字符串变换一下: 'x'-1 -> 'z', ‘x’->‘a’, ‘x’+1->‘b’, ..., 求对应的字符串的最长的回文串。
题解
求最长回文串的O(n)的算法:Manacher算法
算法过程:
- 用’#‘号把每个字符分隔开,且开头结尾都是’#‘。
- RL[i]为以i为中心的最长回文最右的字符与i的距离。
- 已经求过的回文串中,右端点最大的回文串的中心为p。
- 求当前的RL[i]时,若 i 在最大右端点的左边,则RL[i] 初始值为min(RL[j],最大右端点-i),j是以p为中心,i对称的点。否则RL[i]=1。
- 再直接扩展RL[i],同时维护p。
代码
#include <cstdio>
#include <algorithm>
#define N 200002
using namespace std;
char c,s[N<<1];
int RL[N<<1];
int Manacher(){
int i,p=0,q=0;
for(i=0;s[i];i++);
for(i;i>=0;i--) s[i*2+1]=s[i],s[i*2]='#';
for(i=0;s[i];i++){
if(RL[p]+p>i) RL[i]=min(RL[p*2-i],RL[p]+p-i);
else RL[i]=1;
while(s[i-RL[i]]&&s[i-RL[i]]==s[i+RL[i]]) RL[i]++;
if(i+RL[i]>p+RL[p]) p=i;
if(RL[i]>RL[q]) q=i; //q是最长的回文串的中点。
}
return q;
}
int main() {
while(~scanf(" %c%s",&c,s)){
int q=Manacher();
int i=q-RL[q]+1,j=q+RL[q]-1;
if(s[i]=='#')i++,j--;
if(RL[q]>2){
printf("%d %d\n",i/2,j/2);
for(;i<=j;i+=2) printf("%c",(s[i]-c+26)%26+'a');
}else printf("No solution!");
puts("");
}
return 0;
}
【 HDU3294 】Girls' research (Manacher)的更多相关文章
- HDU3294 Girls' research —— Manacher算法 输出解
题目链接:https://vjudge.net/problem/HDU-3294 Girls' research Time Limit: 3000/1000 MS (Java/Others) M ...
- Girls' research(manacher)
Girls' research Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
- 【BZOJ3790】神奇项链 Manacher+贪心
[BZOJ3790]神奇项链 Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色.为了制作这个项链,小 H ...
- 【BZOJ3325】[Scoi2013]密码 Manacher
[BZOJ3325][Scoi2013]密码 Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进. ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
- hdu3294 Girls' research manacher
One day, sailormoon girls are so delighted that they intend to research about palindromic strings. O ...
- hdu 3294 Girls' research(manacher)
Problem Description One day, sailormoon girls are so delighted that they intend to research about pa ...
- 【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP
3790: 神奇项链 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 304 Solved: 150[Submit][Status][Discuss] ...
- 【HDOJ图论题集】【转】
=============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...
随机推荐
- 008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413
008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413
- 一种简单有效的VBA源代码加密办法,支持64位宿主,适用于大部分VBA代码加密
原始出处:http://www.cnblogs.com/Charltsing/p/EncryptVBACode.html VBA代码加密是个老生常谈的问题,自从本人的VBA Dumper发布之后,在O ...
- rbac组件权限按钮,菜单,可拔插
1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板 左侧以及上不动 **** <!DOCTYPE html> <h ...
- 【kindle笔记】之 《浪潮之巅》- 2018-1-
<浪潮之巅> 这本书推荐自最爱的政治课老师. 政治课老师张巍老师.我会一直记得你的. 以这样的身份来到这个学校,他人的质疑,自己的忐忑,老板的不公.犹犹豫豫谨小慎微地前进. 第一次听到这样 ...
- 牛客OI周赛8-普及组
https://ac.nowcoder.com/acm/contest/543#question A. 代码: #include <bits/stdc++.h> using namespa ...
- java编程规范(持续更新)
1:非空判断 错误例子: if(user.getUserName().equals("hollis")){ } 这段代码极有可能在实际运行的时候跑出NullPointerExcep ...
- java.lang包【Object类】
基本描述: (1)Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入: (2)Object类是所有Java类的祖先.每个类都使用 Obje ...
- DAY02、正式介绍python
一.编程语言介绍(***) 1.1.机器语言:直接用计算机能理解的二进制指令编写程序,直接控制硬件 1.2.汇编语言:用英文标签取代二进制指令编写程序,本质也是直接控制硬件 1.3.高级语言:用人类能 ...
- Laravel从入门到精通
1. Laravel框架的下载安装 例如: 在D:\test\laravel目录下新建一个目录为test_laravel 第一步,下载laravel框架 在D:\test\laravel\test_l ...
- font_awesome的icon库的使用
1.使用cdn引入font_awesome图标库的css文件 例如:index.htm <html><head><title>font_awesome test&l ...