BUPT2017 wintertraining(15) #5F

HDU - 3294

题意

给定字母x,字符串变换一下: 'x'-1 -> 'z', ‘x’->‘a’, ‘x’+1->‘b’, ..., 求对应的字符串的最长的回文串。

题解

求最长回文串的O(n)的算法:Manacher算法

算法过程:

  1. 用’#‘号把每个字符分隔开,且开头结尾都是’#‘。
  2. RL[i]为以i为中心的最长回文最右的字符与i的距离。
  3. 已经求过的回文串中,右端点最大的回文串的中心为p。
  4. 求当前的RL[i]时,若 i 在最大右端点的左边,则RL[i] 初始值为min(RL[j],最大右端点-i),j是以p为中心,i对称的点。否则RL[i]=1。
  5. 再直接扩展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)的更多相关文章

  1. HDU3294 Girls' research —— Manacher算法 输出解

    题目链接:https://vjudge.net/problem/HDU-3294 Girls' research Time Limit: 3000/1000 MS (Java/Others)    M ...

  2. Girls' research(manacher)

    Girls' research Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

  3. 【BZOJ3790】神奇项链 Manacher+贪心

    [BZOJ3790]神奇项链 Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色.为了制作这个项链,小 H ...

  4. 【BZOJ3325】[Scoi2013]密码 Manacher

    [BZOJ3325][Scoi2013]密码 Description Fish是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进. ...

  5. Hdu 3294 Girls' research (manacher 最长回文串)

    题目链接: Hdu 3294  Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...

  6. hdu3294 Girls' research manacher

    One day, sailormoon girls are so delighted that they intend to research about palindromic strings. O ...

  7. hdu 3294 Girls' research(manacher)

    Problem Description One day, sailormoon girls are so delighted that they intend to research about pa ...

  8. 【BZOJ-3790】神奇项链 Manacher + 树状数组(奇葩) + DP

    3790: 神奇项链 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 304  Solved: 150[Submit][Status][Discuss] ...

  9. 【HDOJ图论题集】【转】

    =============================以下是最小生成树+并查集====================================== [HDU] How Many Table ...

随机推荐

  1. Codeforces Round #533 (Div. 2) A. Salem and Sticks(暴力)

    A. Salem and Sticks time limit per test 1 second memory limit per test 256 megabytes input standard ...

  2. js变量以及其作用域

    一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...

  3. Git更新本地仓库

    1.查看远程仓库git remote -v2.从远程获取最新版本到本地git fetch origin master:temp3.比较本地的仓库与远程仓库的区别git diff temp4.合并tem ...

  4. MySQL 主从同步遇到的问题及解决方案

    在做某个项目的时候,使用主从数据库,master负责update.delete.insert操作,而slave负责select操作. 情景1:发表文章与查看文章 可以认为这个项目是一个博客系统,这里就 ...

  5. 配置router列表

    import Vue from "vue"; import VueRouter from 'vue-router'; import Star from '../components ...

  6. Html5使用canvas作图

    以下例子是项目中实际用到的.不足之处请大家指正,设计到画线,写文字,填充,文字旋转. <!DOCTYPE html> <html> <head lang="en ...

  7. mysql异常:Packet for query is too large (10240 > 1024). You can change this value

    出现这个问题的原因是:mysql的配置文件中 max_allowed_packet 设置过小,mysql根据配置文件会限制server接受的数据包大小. 还有人会说我操作的数据量明显没有超过这个值为啥 ...

  8. Windows 机器上面同时安装mysql5.6 和 mysql5.7 的方法

    1. 自己遇到的两个坑: . mysql 登录的时候 需要使用-P 来指定端口号 不然默认走 呢 . mysql 5.6 和 mysql 5.7 更改用户密码的命令不一样.. 我这边浪费了很长时间: ...

  9. Farm Irrigation

    题目:Farm Irrigation 题目链接:http://210.34.193.66:8080/vj/Problem.jsp?pid=1494 题目思路:并查集 #include<stdio ...

  10. JS对象、基本类型和字面量的区别

    字面值: var str1='this is a simple string'; var num1=1.45; var answer1=true; 基本类型: var str2=String('thi ...