Cod sursa(job #332763)

Utilizator AnDrEwBoYA Andrei AnDrEwBoY Data 19 iulie 2009 17:59:25
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <string.h>

#define nmax 1000005

char s[nmax];
int t,n,p[nmax],pref[nmax];

int kmp() 
{
     n = strlen(s) - 1;
     long k = 0;
     p[1] = 0;
     pref[0] = 1;
     int max = 0;
     for(int i = 2;i <= n;i++) {
         while (k && s[k+1] != s[i]) k = p[k];
         if(s[k+1] == s[i])
			 k++;
         p[i] = k;
         if (p[i] && (i % (i - p[i]) == 0))
			 max=i;
     }    
    // for(int i=1;i<=n;i++) printf("%d ",p[i]);
   //  printf("-\n");

     return max;
}

int main() 
{
    freopen("prefix.in","r",stdin);
    freopen("prefix.out","w",stdout);
    
    scanf("%d\n",&t);
    for(int i=1;i<=t;i++) 
	{
        memset(s,0,sizeof(s));
        scanf("%s\n",&s);
        for(int j = strlen(s); j >= 1; j--) s[j]=s[j-1];
		printf("%d\n",kmp());            
    }    
    return 0;
}