Cod sursa(job #76118)
| Utilizator | Data | 8 august 2007 02:42:20 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.58 kb |
#include<stdio.h>
#define Nm 1000002
char S[Nm];
int Pi[Nm];
int solve()
{
int i,k,ans=0;
Pi[1]=k=0;
for(i=2;S[i];++i)
{
while(k && S[i]!=S[k+1])
k=Pi[k];
if(S[i]==S[k+1])
++k;
Pi[i]=k;
if(Pi[i] && i%(i-Pi[i])==0)
ans=i;
}
return ans;
}
int main()
{
int t;
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d\n",&t);
while(t--)
{
gets(S+1);
printf("%d\n",solve());
}
return 0;
}
