Pagini recente » Cod sursa (job #1820462) | Cod sursa (job #2941511) | Cod sursa (job #1311572) | Cod sursa (job #2888332) | Cod sursa (job #332763)
Cod sursa(job #332763)
#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;
}