zoukankan      html  css  js  c++  java
  • hdu-3294(最长回文子串)

    题意:给你一个字符和一个字符串让你求出最长回文子串并且输出来,答案需要根据给出的字符转换一下,就是将给出的字符认定为a,然后依次向后推;

    解题思路:manacher模板+一些处理

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<Cstdio>
    using namespace std;
    char s[200500],a[400500];
    char t[30],m;
    int p[400500];
    int n;
    int pos;
    int change()
    {
        int i,j,t;
        a[0]='$';
        a[1]='#';
        j=2;
        for(i=0;i<n;i++)
        {
            a[j++]=s[i];
            a[j++]='#';
        }
        a[j]='';
        return j;
    }
    int manacher()
    {
        int len=change();
        int maxlen=-1;
        int id;
        int mx=0;
        for(int i=1;i<len;i++)
        {
            if(i<mx)
                p[i]=min(p[id*2-i],mx-i);
            else
                p[i]=1;
            while(a[i-p[i]]==a[i+p[i]])
                p[i]++;
            if(mx<p[i]+i)
            {
                mx=p[i]+i;
                id=i;
            }
            if(maxlen<p[i]-1)
            {
                maxlen=p[i]-1;
                pos=i;
            }
        }
        return maxlen;
    }
    int main()
    {
        int x,y;
        //ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
        t[0]='z';t[1]='a';
        for(int i=2;i<=25;i++)
            t[i]=t[i-1]+1;
        while(scanf("%c %s",&m,s)!=EOF)
        {
            getchar();
            n=strlen(s);
            int ans=manacher();
            x=(pos-ans+1)/2-1;y=(ans+pos-1)/2-1;
            if(ans<=1)
            {
                printf("No solution!
    ");
            }
            else
            {
                printf("%d %d
    ",x,y);
                for(int i=x;i<=y;i++)
                {
                    int xx=s[i]-m;
                    xx++;
                    xx=xx+26;xx=xx%26;
                    printf("%c",t[xx]);
                }
                printf("
    ");
            }
        }
    }
    

      

  • 相关阅读:
    VS2010 正则批量替换头文件路径
    VC++ 内存泄露与检测的一种方法
    命令行编译C++程序
    Link1123:转换到COFF期间失败:文件无效或损坏
    C语言基础知识
    PCL深度图像(2)
    PCL关键点(1)
    PCL采样一致性算法
    PCL滤波介绍(3)
    PCL滤波介绍(2)
  • 原文地址:https://www.cnblogs.com/huangdao/p/9459387.html
Copyright © 2011-2022 走看看