Cod sursa(job #362423)
| Utilizator | Data | 9 noiembrie 2009 17:47:01 | |
|---|---|---|---|
| Problema | Prefix | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva de probleme | Marime | 0.49 kb |
#include <cstdio>
#define LMAX 1000010
#include <cstring>
int t, pi[LMAX];
char s[LMAX];
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf("%d",&t);
int i, k, r, n;
while (t--)
{
scanf("%s",s);
n=strlen(s);
for (i=n; i>0; i--) s[i]=s[i-1];
k=r=0;
pi[1]=0;
for (i=2; i<=n; i++)
{
while (k && s[k+1]!=s[i]) k=pi[k];
if (s[k+1]==s[i]) k++;
pi[i]=k;
if (k && !(i %(i-k))) r=i;
}
printf("%d\n",r);
}
}