题目链接:http://icpc.njust.edu.cn/Problem/Hdu/3294/

回文长度如果是mxx,回文中心是id的话,在扩展串中(id-mxx+1,id+mxx-1)的这段中去除标记符号的部分就是回文串。还有个注意点就是错位循环赋值的问题。

代码如下:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef unsigned int ui;
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. #define pf printf
  7. #define mem(a,b) memset(a,b,sizeof(a))
  8. #define prime1 1e9+7
  9. #define prime2 1e9+9
  10. #define pi 3.14159265
  11. #define lson l,mid,rt<<1
  12. #define rson mid+1,r,rt<<1|1
  13. #define scand(x) scanf("%llf",&x)
  14. #define f(i,a,b) for(int i=a;i<=b;i++)
  15. #define scan(a) scanf("%d",&a)
  16. #define dbg(args) cout<<#args<<":"<<args<<endl;
  17. #define inf 0x3f3f3f3f
  18. #define maxn 200010
  19. int n,m,t;
  20. char s[maxn],ma[maxn<<];
  21. int Len[maxn<<];
  22. int mxx,id;//最大回文半径和中心
  23. void init(char c,char* s)
  24. {
  25. int len=strlen(s);
  26. f(i,,len-)
  27. {
  28. s[i]=(char)('a'+(s[i]-c+)%);
  29. }
  30. }
  31. void manacher(char* s,int len)
  32. {
  33. int l=;
  34. ma[l++]='$';
  35. ma[l++]='#';
  36. f(i,,len-)
  37. {
  38. ma[l++]=s[i];
  39. ma[l++]='#';
  40. }
  41. ma[l]=;
  42. int pos=,mr=;
  43. mxx=;
  44. f(i,,l-)
  45. {
  46. Len[i]=(mr>i)?min(mr-i,Len[*pos-i]):;
  47. while(ma[i+Len[i]]==ma[i-Len[i]])Len[i]++;
  48. if(i+Len[i]>mr)mr=i+Len[i],pos=i;
  49. if(Len[i]->mxx)
  50. {
  51. mxx=Len[i]-;
  52. id=i;
  53. }
  54. }
  55. }
  56. int main()
  57. {
  58. //freopen("input.txt","r",stdin);
  59. //freopen("output.txt","w",stdout);
  60. std::ios::sync_with_stdio(false);
  61. char c;
  62. while(scanf(" %c %s",&c,s)==)
  63. {
  64. init(c,s);
  65. int len=strlen(s);
  66. int ansl=,ansr=;
  67. manacher(s,len);
  68. if(mxx==)pf("No solution!\n");//回文长度是1
  69. else
  70. {
  71. int l=(id-mxx+)/-;
  72. int r=(id+mxx-)/-;
  73. pf("%d %d\n",l,r);
  74. f(i,l,r)pf("%c",s[i]);
  75. pf("\n");
  76. // f(i,id-mxx+1,id+mxx-1)pf("%c",ma[i]);
  77. // pf("\n");
  78. }
  79. }
  80. }

hdu3294 Manacher算法模板的更多相关文章

  1. hdu-3068-最长回文(manacher算法模板)

    题目链接 /* Name:hdu-3068-最长回文 Copyright: Author: Date: 2018/4/24 16:12:45 Description: manacher算法模板 */ ...

  2. 字符串匹配--manacher算法模板

    manacher算法主要是处理字符串中关于回文串的问题的,它可以在 O(n) 的时间处理出以字符串中每一个字符为中心的回文串半径,由于将原字符串处理成两倍长度的新串,在每两个字符之间加入一个特定的特殊 ...

  3. 最长回文子串Manacher算法模板

    Manacher算法能够在O(N)的时间复杂度内得到一个字符串以任意位置为中心的回文子串.其算法的基本原理就是利用已知回文串的左半部分来推导右半部分. 首先,在字符串s中,用rad[i]表示第i个字符 ...

  4. 最长回文---hdu3068 (回文串 manacher 算法模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题意很清楚:就是求一个串s的子串中最长回文串的长度:这类题用到了manacher算法 #incl ...

  5. Manacher算法模板

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...

  6. hdu3294 manacher算法

    这道题哇 其实是裸的manacher 无论怎么变 是回文的就是回文 所以 特殊处理一下输出就好了 不过最后的左右端点l,r.l=(p-p[pos]+2)/2-1,r=(p+p[pos]-2)/2-1; ...

  7. 洛谷P3805 [模板]Manacher算法 [manacher]

    题目传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符 ...

  8. 题解 P3805 【【模板】manacher算法】

    题解 P3805 [[模板]manacher算法] 我们先看两个字符串: ABCCBA ABCDCBA 显然这两字符串是回文的 然而两个串的对称中心的特性不同,第一个串,它的对称中心在两个C中间,然而 ...

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

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

随机推荐

  1. Python实现简单Web服务器

    实验楼教程链接: https://www.shiyanlou.com/courses/552/labs/1867/document http原理详解(http下午茶): https://www.kan ...

  2. windows的各种扩展名详解

    Windows系统文件按照不同的格式和用途分很多种类,为便于管理和识别,在对文件命名时,是以扩展名加以区分的,即文件名格式为: 主文件名.扩展名.这样就可以根据文件的扩展名,判定文件的种类,从而知道其 ...

  3. Welcome to Erhan Blog

    "Yeah It's on. " 前言 Erhan 的 Blog 就这么开通了. 跳过废话,直接看技术实现 2018 年,Hux 总算有个地方可以好好写点东西了. 作为一个程序员, ...

  4. JAVA中对list map根据map某个key值进行排序

    package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...

  5. FPGA小白学习之路(2)error:buffers of the same direction cannot be placed in series

    锁相环PLL默认输入前端有个IBUFG单元,在输出端有个BUFG单元,而两个BUFG(IBUFG)不能相连,所以会报这样的错: ERROR:NgdBuild:770 - IBUFG 'u_pll0/c ...

  6. 使用HtmlAgilityPack和ScrapySharp抓取网页数据遇到的几个问题解决方法——格式编码问题

    需要用到对应市区县街道居委会的区域编码,于是找到统计局的网页,对这些数据进行抓取,用到了HtmlAgilityPack和ScrapySharp,由于也是第一次从网页抓取数据,所以对于HtmlAgili ...

  7. 我的webpack学习笔记(二)

    前言 上一篇文章我们讲了多页面js的打包,本篇文章我们继续scss的打包. 多页面css单独打包 首先,我们css编写采用的是sass,所以我们先来安装sass-loader以及可以用到的依赖 $ n ...

  8. 用 HTML5 造个有诚意的 23D 招聘稿

    前言 招聘对于一个公司来说是相当重要的一个环节,首先它影响着公司未来发展的趋势,其次它为公司注入新鲜血液,使公司更具有活力.当然在工业互联网,物联网大背景下诞生的 HT 也是需要注入新鲜的血液来进一步 ...

  9. JavaScript面向对象class

    JavaScript面向对象class 本周逆战班学习的主题是“面向对象”,很多人觉得面向对象很难理解,但其实我们早就在面向对象的思想之中了,今天就让我们再重新认识一下他,主要介绍一下ES6中新增的c ...

  10. seo搜索优化教程14-seo搜索优化实战

    为了使大家更方便的了解及学习网络营销推广.seo搜索优化,星辉信息科技强势推出seo搜索优化教程.此为seo教程第14课 根据前面学习的seo搜索优化内容,星辉科技进行总结性的分析,形成一份标准的se ...