hdu 4763

来源:互联网 发布:记账软件电脑版 编辑:程序博客网 时间:2024/05/17 23:09
点击打开链接//kmp#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1e6+5;char T[maxn];int n,m;void Getnext(int next[]){    m=strlen(T);    int i=0,j=next[0]=-1;    while(i<m)    {        if(j==-1||T[i]==T[j])        {            i++;            j++;            next[i]=j;        }        else j=next[j];    }}int main(){    while(scanf("%d",&n)==1)    {        for(int i=0;i<n;i++)            {                scanf("%s",T);                int next[maxn];                Getnext(next);                int k=m;                int ans=0;                while(k>0)                {                    if(k*2<=m) ans=max(ans,k);                    k=next[k];                }                printf("%d\n",ans);            }    }    return 0;}