hdu3294 Girls' research 【manacher算法】

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+10;
string t;
char s[10],a[200000+10];
int p[N];

int main()
{
    while(~scanf("%s%s",s,a))
    {
        int k=s[0]-'a';
        int len=strlen(a);
        for(int i=0;i<len;i++)
        {
            a[i]=(a[i]-'a'-k+26)%26+'a';
        }
        t="$#";
        for(int i=0;i<len;i++)
        {
            t+=a[i];
            t+='#';
        }
        memset(p,0,sizeof(p));
        int id=0;
        int mx=0;
        int ans=1;
        int up=t.length();
        int l=0;
        for(int i=1;i<up;i++)
        {
            if(i>mx)
                p[i]=1;
            else
                p[i]=min(p[2*id-i],mx-i);
            while(t[i-p[i]]==t[i+p[i]]) p[i]++;
            if(p[i]+i>mx)
            {
                id=i;
                mx=p[i]+i;
            }
            if(p[i]-1>ans)
            {
                ans=p[i]-1;
                l=i-p[i]+1;
            }
        }
        if(ans==1) printf("No solution!\n");
        else
        {
            string o="";
            int st=0;
            for(int i=0;i<l;i++)
            {
                if(t[i]!='#'&&t[i]!='$') st++;
            }
            for(int i=l;i<=l+2*ans;i++)
            {
                if(t[i]=='#'||t[i]=='$') continue;
                o+=t[i];
            }
            printf("%d %d\n",st,st+ans-1);
            cout<<o<<endl;
        }
    }
    return 0;
}
發佈了613 篇原創文章 · 獲贊 12 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章