Cod sursa(job #174690)

Utilizator DorinOltean Dorin Dorin Data 9 aprilie 2008 10:00:36
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
# include <stdio.h>
# include <string.h>

# define input "prefix.in"
# define output "prefix.out"

# define maxn 1000001

char s[maxn];
int T,n,i,k;
int res,l;
int a[maxn];

int main()
{
    freopen (input,"r", stdin);
    freopen (output,"w", stdout);
    
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s);
        n = strlen(s);
        k = -1;
        
        a[0] = -1;
        for ( i = 1; i< n; i++)
        {

            while(k >= 0 && s[i] != s[k+1])
              k = a[k];
            if( s[k+1] == s[i] )
               k ++;
            a[i] = k;
        }
        res = 0;
        
        for ( i = n-1; i ; i--)
           if(a[i] == 0)
           {
                   if(2*i-1 < n && a[2*i -1] == i-1)
                   {
					   l = i;
					   while(l+i <= n && a[l + i - 1] == l-1)
						l+=i;
					   res = l;
                       break;
                   }
           }
        
//        for ( i = 1; i< n; i++)            printf("%d ",a[i]);
                  
        printf("%d\n",res);
                      
    }
    
    return 0;
}