zoukankan      html  css  js  c++  java
  • hdu3294 manacher算法

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

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int M=450000;
    int len,id,p[M],ans,pos,k;
    char T[2],s[M];
    int main()
    {
        while(~scanf("%s %s",T,s)){
            memset(p,0,sizeof(p));
            len=strlen(s); ans=1; id=0; pos=0; k=T[0]-'a';
            for(int i=len;i>=0;i--) s[i*2+2]=s[i],s[i*2+1]='#';
            s[0]='&'; len=len*2+1;
            for(int i=2;i<=len;i++){
                if(id+p[id]>i) p[i]=min(p[id*2-i],id+p[id]-i);
                else p[i]=1;
                while(s[i-p[i]]==s[i+p[i]]) p[i]++;
                if(p[i]>ans) ans=p[i],pos=i;
                if(id+p[id]<i+p[i]) id=i;
            }
            int l=(pos-p[pos]+2)/2-1,r=(pos+p[pos]-2)/2-1;
            if((r-l+1)<2){printf("No solution!
    "); continue;}
            printf("%d %d
    ",l,r);
            for(int i=pos-p[pos]+2;i<=pos+p[pos]-2;i+=2) printf("%c",(s[i]-'a'-k+26)%26+'a'); printf("
    ");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    读取points文件
    JSP语法1
    servlet与SSI
    JDBC连接数据库
    django开发Blog(2)
    django开发Blog(1)
    JSP学习2:useBean动作标签
    django开发Blog(4)
    Servelet基础
    servlet会话管理2
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/6958701.html
Copyright © 2011-2022 走看看