HDU 3294 Manacher模版题
题意:求最长回文子串所在的区间,然后第一个字符代表a,以后的顺推,最后输出这个区间顺推后的串
思路:Manacher轻松水过。记录下最长回文串的位置和长度即可了,然后输出时自己处理一下,大水题.......
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <iostream>
- #include <algorithm>
- using namespace std;
- typedef long long ll;
- const int inf=0x3f3f3f3f;
- const int maxn=200010;
- char str[maxn],tmp[maxn<<1];
- int len1[maxn<<1],pos;
- int init(char *st){
- int len=strlen(st);
- tmp[0]='@';
- for(int i=1;i<=2*len;i+=2){
- tmp[i]='#';
- tmp[i+1]=st[i/2];
- }
- tmp[2*len+1]='#';
- tmp[2*len+2]='$';
- tmp[2*len+3]=0;
- return 2*len+1;
- }
- int Manacher(char *st,int len){
- int p=0,ans=0,po=0;
- for(int i=1;i<=len;i++){
- if(p>i) len1[i]=min(p-i,len1[2*po-i]);
- else len1[i]=1;
- while(st[i-len1[i]]==st[i+len1[i]]) len1[i]++;
- if(len1[i]+i>p){
- p=len1[i]+i;
- po=i;
- }
- if(len1[i]>ans){
- ans=len1[i];
- pos=i;
- }
- }
- return ans-1;
- }
- int main(){
- char ch;
- while(scanf(" %c%s",&ch,str)!=-1){
- init(str);
- int len=init(str);
- int ans=Manacher(tmp,len);
- if(ans==1) printf("No solution!\n");
- else{
- int le,ri;
- if(pos%2==0){
- le=pos/2-1-ans/2;
- ri=le+ans-1;
- }else{
- le=pos/2-ans/2;
- ri=le+ans-1;
- }
- printf("%d %d\n",le,ri);
- int t=ch-'a';
- for(int i=le;i<=ri;i++){
- int k=str[i]-t;
- if(k>=97) printf("%c",str[i]-t);
- else printf("%c",str[i]-t+26);
- }
- printf("\n");
- }
- }
- return 0;
- }
HDU 3294 Manacher模版题的更多相关文章
- 最长回文 HDU - 3068 manacher 模板题
题意:找串的最长回文字串(连续) 题解:manacher版题 一些理解:首位加上任意两个字符是为了判断边界. 本算法主要是为了 1.省去奇偶分类讨论. 2.防止形如aaaaaaa的串使得暴力算法蜕化为 ...
- HDU 3294 (Manacher) Girls' research
变形的求最大回文子串,要求输出两个端点. 我觉得把'b'定义为真正的'a'是件很无聊的事,因为这并不会影响到最大回文子串的长度和位置,只是在输出的时候设置了一些不必要的障碍. 另外要注意一下原字符串s ...
- Girls' research HDU - 3294(马拉车水题)
题意: 求最长回文串 长度要大于等于2 且输出起点和终点 输出回文串字符 这个字符还是要以给出的字符为起点a 输出 解析: 分析一下s_new串就好了 #include <iostream& ...
- hdu 3294 manacher 求回文串
感谢: http://blog.csdn.net/ggggiqnypgjg/article/details/6645824/ O(n)求给定字符串的以每个位置为中心的回文串长度. 中心思想:每次计算位 ...
- Manacher 算法(hdu 3068 && hdu 3294)
今天打算补前晚 BC 的第二题,发现要用到能在 O(n) 时间求最大回文子串长度的 Manacher 算法,第一次听,于是便去百度了下,看了大半天,总算能看懂了其思想,至于他给出的代码模板我没能完全看 ...
- HDU 2222 Keywords Search(AC自动机模版题)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others ...
- HDU 1712 ACboy needs your help (分组背包模版题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 有n门课,和m天时间.每门课上不同的天数有不同的价值,但是上过这门课后不能再上了,求m天里的最大 ...
- (回文串 Manacher )Girls' research -- hdu -- 3294
http://acm.hdu.edu.cn/showproblem.php?pid=3294 Girls' research Time Limit:1000MS Memory Limit:32 ...
- Hdu 3294 Girls' research (manacher 最长回文串)
题目链接: Hdu 3294 Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.... ...
随机推荐
- PLSQL Developer连接远程Oracle方法(非安装client)
远程连接Oracle比較麻烦,通常须要安装oracle的客户端才干实现. 通过instantclient能够比較简单的连接远程的Oracle. 1.新建文件夹D:\Oracle_Cleint用于存放相 ...
- 解决phpcms使用php7.1.9时修改后台菜单错误 "[] operator not supported for strings"错误提示
出现这个错误提示是因为 $array 在初始化的时候是一个字符串,在下面使用的时候作为数组使用,php7.x版本并没有将$array自动转换为 数组而是以字符串存在"[]"作为了运 ...
- Android面试,简要介绍一下asynctask和handler的优缺点
1 )AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以 ...
- JAVA逐行读取TXT文件
package help; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; imp ...
- How to make an executable jar file?
https://stackoverflow.com/questions/5258159/how-to-make-an-executable-jar-file 文件的路径如下: package com. ...
- 屏幕录像大师如何把LXE文件转换为EXE文件
EXE 和 LXE 实际上是同一种格式,文件大小完全相同,可以快速相互转换.区别是EXE复制到其它电脑上可以直接播放,LXE需要播放器播放,我们提供LXE播放器,而且是完全免费的.EXE的好处是复制到 ...
- xcode 修改 organization name 和 company identifier
一:修改 organization name 在终端下 defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGA ...
- ZK框架笔记4、通用组件、页面、桌面
组件(component)是一种用户接口(UI)对象,如一个标签.按钮.树. 页面(page)是一个组件的集合. 桌面(desktop)是一个包含相同URL请求的页面. ...
- 为什么用strlcpy取代strncpy
为什么用strlcpy取代strncpy 标签: C, C语言, strlcpy, strncpy 标题: 为什么用strlcpy取代strncpy作者: Demon链接: http://demon. ...
- android源代码分析 android toast使用具体解释 toast自己定义
在安卓开发过程中.toast使我们常常使用的一个类.当我们须要向用户传达一些信息,可是不须要和用户交互时,该方式就是一种十分恰当的途径. 我们习惯了这样使用toast:Toast.makeText(C ...