hdu3294Girls' research(manacher)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3294

题目不难,感觉输出比较麻烦。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=2000010;
 6 char s[maxn<<1];
 7 int r[maxn<<1];
 8 char ans[maxn];
 9 char ch;
10 int main()
11 {
12     while(scanf("%c",&ch)!=EOF)
13     {
14         getchar();
15         scanf("%s",s);
16         getchar();
17         int z=‘a‘-ch;
18         int id=0,m=0,mx=0;
19         int len=strlen(s);
20         for(int i=len;i>=0;i--)
21         {
22             s[2*i+2]=s[i];
23             s[2*i+1]=‘#‘;
24         }
25         s[0]=‘*‘;
26         for(int i=2;i<2*len+1;i++)
27         {
28             if(id+r[id]>i) r[i]=min(r[2*id-i],r[id]+id-i);
29             else r[i]=1;
30             while(s[i-r[i]]==s[i+r[i]]) r[i]++;
31             if(m<r[i]) {m=r[i];mx=i;}
32             if(id+r[id]<i+r[i]) id=i;
33
34         }
35         m--;
36         int sx=-1,e=-1;
37         if(m<=1) puts("No solution!");
38         else
39             {
40
41                 int po=0;
42                 for(int i=mx-m;i<=mx+m;i++)
43                 {
44                     if(s[i]!=‘#‘&&s[i]!=‘*‘)
45                     {
46                         if(sx==-1&&e==-1) {sx=i;e=i;}
47                         e=i;
48                         ans[po++]=char(s[i]-‘a‘+z+26)%26+‘a‘;
49
50                     }
51                 }
52             ans[po]=‘\0‘;
53             printf("%d %d\n%s\n",sx/2==0?0:sx/2-1,e/2-1,ans);
54             }
55     }
56     return 0;
57 }

hdu3294Girls' research(manacher)

时间: 2024-09-30 02:00:11

hdu3294Girls' research(manacher)的相关文章

HDU----(3294)Girls&#39; research(manacher)

Girls' research Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 537    Accepted Submission(s): 199 Problem Description One day, sailormoon girls are so delighted that they intend to research abo

HDU 4513 吉哥系列故事——完美队形II(Manacher)

Problem Description 吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] ... h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的: 2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个人可以任意: 3.从左到中间那

O(n)回文子串(Manacher)算法

O(n)回文子串(Manacher)算法 资料来源网络 参见:http://www.felix021.com/blog/read.php?2040 问题描述: 输入一个字符串,求出其中最大的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如abba和yyxyy. 解析: 这里介绍O(n)回文子串(Manacher)算法 算法基本要点:首 先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度:在每个字符的两边都插入一个特殊的符号.比

算法导论:回文子串(Manacher)算法 ,O(n)时间效率实现

问题描述: 输入一个字符串,求出其中最大的回文子串.子串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如abba和yyxyy. 解析: 这里介绍O(n)回文子串(Manacher)算法 算法基本要点:首先用一个非常巧妙的方式,将所有可能的奇数/偶数长度的回文子串都转换成了奇数长度: 在每个字符的两边都插入一个特殊的符号.比如 abba 变成 #a#b#b#a#, aba变成 #a#b#a#. 为了进一步减少编码的复杂度,可以在字符串的开始加入另一个特殊字符,这样就不用

CC 3-Palindromes(manacher)

传送门:3-Palindromes 题意:求为回文串且能整除3且不前导0的子串个数. 分析:由 manacher算法O(N)可算出以i为坐标的最长为p[i]回文子串,且Si-k,Si-k+1......Si+k-1,Si+k(0<k<p[i])全为回文串. 又知,能整除3的整数数位和也能整除3,那么只要Si-k,Si-k+1......Si+k-1,Si+k和整除3即可. 由回文串对称性知Si-k==Si-k,那么只要Si-k..Si-1这段中模3余数与Si模3余数相同,Si-k...Si+k

最长回文(Manacher)

HOT~ 杭电2015级新生如何加入ACM集训队? 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12244    Accepted Submission(s): 4501 Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符

吉哥系列故事——完美队形II(Manacher)

吉哥又想出了一个新的完美队形游戏! 假设有n个人按顺序站在他的面前,他们的身高分别是h[1], h[2] … h[n],吉哥希望从中挑出一些人,让这些人形成一个新的队形,新的队形若满足以下三点要求,则就是新的完美队形: 1.挑出的人保持原队形的相对顺序不变,且必须都是在原队形中连续的:2.左右对称,假设有m个人形成新的队形,则第1个人和第m个人身高相同,第2个人和第m-1个人身高相同,依此类推,当然如果m是奇数,中间那个人可以任意:3.从左到中间那个人,身高需保证不下降,如果用H表示新队形的高度

hdu3294(manacher)

传送门:Girls' research 题意:求最长回文串并输出位置及转换后的字符串. 分析:manacher算法算出最长回文串后记录中心位置,然后再转换回原字符串的起始和结束位置. #pragma comment(linker,"/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <string> #include <cmath> #i

BZOJ 2084 [Poi2010]Antisymmetry(manacher)

[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2084 [题目大意] 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过来和原串一样,就称作“反对称”字符串. 比如00001111和010101就是反对称的,1001就不是. 现在给出一个长度为N的01字符串,求它有多少个子串是反对称的. [题解] 修改manacher的判定条件,对该串进行计算即可. [代码] #include <cstdio> #include