[manacher] hdu 3294 Girls' research

题意:

给一个字符x代表真实的a 然后输出的时候转换

然后就是求最长回文子串的串是什么 长度要大于1

思路:

就是裸的manacher,弄清楚下标的转换关系就好了

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"map"
#include"vector"
#include"string"
#define inf 0x7fffffff
#include"iostream"
#define ll __int64
using namespace std;
#define N 200005
char a[N],b[N*2];
int rad[N*2];
int main()
{
    char x[2];
    while(scanf("%s%s",x,&a[1])!=-1)
    {
        int maxl,maxid,id;
        int i,len;
        for(i=1; a[i]; i++)
        {
            b[i*2]=a[i];
            b[i*2+1]='#';
        }
        len=2*i;
        b[0]='?';
        b[1]='#';
        b[len]='\0';
        maxid=id=0;
        maxl=0;
        int ansi;
        for(i=1; i<len; i++)
        {
            if(maxid>i)  rad[i]=min(rad[2*id-i],maxid-i);
            else  rad[i]=1;
            while(b[i-rad[i]]==b[i+rad[i]])
            {
                rad[i]++;
            }
            if(rad[i]+i>maxid)
            {
                maxid=rad[i]+i;
                id=i;
            }
            if(rad[i]>maxl)
            {
                maxl=rad[i];
                ansi=i;
            }
        }
        if(maxl-1<2) puts("No solution!");
        else
        {
            int kk=x[0]-'a';
            int ans=maxl-1,ansl,ansr;
            ansl=(ansi-(ans-1))/2-1;
            ansr=ansl+ans-1;
            printf("%d %d\n",ansl,ansr);
            for(int i=ansl; i<=ansr; i++)
            {
                if(a[i+1]-kk<'a') printf("%c",'z'+1-'a'+(a[i+1]-kk));
                else printf("%c",a[i+1]-kk);
            }
            puts("");
        }
    }
    return 0;
}

[manacher] hdu 3294 Girls' research

时间: 2024-09-30 18:06:30

[manacher] hdu 3294 Girls' research的相关文章

[manacher] hdu 3294 Girls&amp;#39; research

题意: 给一个字符x代表真实的a 然后输出的时候转换 然后就是求最长回文子串的串是什么 长度要大于1 思路: 就是裸的manacher,弄清楚下标的转换关系就好了 代码: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"queue" #include"algorithm" #inc

HDU 3294 Girls&#39; research (Manacher算法 + 记录区间)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3294 题目大意:输入一个字符ch和一个字符串,问如果把ch当作'a'的话,字符串的每个字符也要做相应变化,如b aa,若b为'a',则b前面的a就为'a'前面的'z',这里是循环表示,输出字符串的最长回文子串,如果最长回文子串串长为1,输出No solution! 几乎是模板题,唯一的特别之处就是要输出回文串字符,所以要记录max(Mp[i])对应的在原串中的字符区间,根据Manacher算法的步骤

Hdu 3294 Girls&#39; research (manacher 最长回文串)

题目链接: Hdu 3294  Girls' research 题目描述: 给出一串字符串代表暗码,暗码字符是通过明码循环移位得到的,比如给定b,就有b == a,c == b,d == c,.......,a == z. 问最长回文串所在区间,以及最长回文串所表示的明码. 解题思路: 字符串长度[1,200000],用manacher算法很轻松就搞定了. get√新技能请点击me 1 #include <cstdio> 2 #include <cstring> 3 #includ

HDU 3294 Girls&#39; research

题目地址 manacher 1 #include<cstdio> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 const int Nmax=200005; 6 char s[Nmax]; 7 char str[Nmax*2+10]; 8 int p[Nmax*2+10]; 9 int hashh[Nmax*2+10]; 10 int id; 11 int maxlen; 12 i

(回文串 Manacher )Girls&#39; research -- hdu -- 3294

http://acm.hdu.edu.cn/showproblem.php?pid=3294 Girls' research Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3294 Description One day, sailormoon girls are so delighted that they intend to res

HDU 3294 (Manacher) Girls&#39; research

变形的求最大回文子串,要求输出两个端点. 我觉得把'b'定义为真正的'a'是件很无聊的事,因为这并不会影响到最大回文子串的长度和位置,只是在输出的时候设置了一些不必要的障碍. 另外要注意一下原字符串s1中的字符在预处理以后的字符串s2中对应的坐标关系,这样输出的时候就可以照着这个关系转化. 轻松1A,嘿嘿 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5

Girls&#39; research HDU - 3294(马拉车水题)

题意: 求最长回文串 长度要大于等于2  且输出起点和终点  输出回文串字符 这个字符还是要以给出的字符为起点a 输出 解析: 分析一下s_new串就好了 #include <iostream> #include <cstdio> #include <sstream> #include <cstring> #include <map> #include <set> #include <vector> #include &l

Girls&#39; research(manacher)

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

Manacher 算法(hdu 3068 &amp;&amp; hdu 3294)

今天打算补前晚 BC 的第二题,发现要用到能在 O(n) 时间求最大回文子串长度的 Manacher 算法,第一次听,于是便去百度了下,看了大半天,总算能看懂了其思想,至于他给出的代码模板我没能完全看懂,只好自己试着实现,发现理解了思想后还是能实现出来的,用自己的风格去写更好理解,先附上讲解 Manacher 算法的几个链接: Manacher算法--O(n)回文子串算法 (我就是看这个理解的~) Manacher算法处理字符串回文 hdu3068之manacher算法+详解 浅谈manache