Pagini recente » Cod sursa (job #829183) | Cod sursa (job #1032557) | Cod sursa (job #533734) | Cod sursa (job #210804) | Cod sursa (job #974460)
Cod sursa(job #974460)
//#include<cstdio>
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int t,n,p[10000001],a[10000001],sol,i,j,k;
char s[10000001],c;
int main()
{
//freopen("prefix.in","r",stdin);
//freopen("prefix.out","w",stdout);
//scanf("%d",&t);
f>>t;
for(i=0;i<=t;i++)
{
//scanf("%s",&s);
f.getline(s,10000001);
n=strlen(s);
for(j=n;j>0;j--)
s[j]=s[j-1];
p[1]=0;
for(k=0,j=2;j<=n;j++)
{
//k=0;
while(k&&s[k+1]!=s[j])
k=p[k];
if(s[k+1]==s[j])
k++;
p[j]=k;
}
sol=0;
for(j=1;j<=n;j++)
if((j-p[j]==p[j])||(j-p[j]==p[j]-p[p[j]]&&a[p[j]]))
{
a[j]=1;
sol=j;
}
else
a[j]=0;
//printf("%d\n",sol);
g<<sol<<"\n";
}
return 0;
}