Pagini recente » Cod sursa (job #2481345) | Cod sursa (job #1524994) | Cod sursa (job #631789) | Cod sursa (job #2582176) | Cod sursa (job #1164259)
#include<stdio.h>
#include<string.h>
const int N=1000001;
using namespace std;
FILE *f,*g;
int t; int kmp[N]; char c[N];
void read(void){
f=fopen("prefix.in","r");
g=fopen("prefix.out","w");
fscanf(f,"%d",&t);
}
void knuthmp(char c[],int n){
int i; int k=-1; int max=0;
kmp[0]=0;
for(i=1; i<=n-1; i++){
while (k>-1 && c[k+1] != c[i]) k=kmp[k]-1;
if (c[k+1] == c[i]) ++k;
kmp[i]=k+1;
if (kmp[i] != 0) if ( (i+1) == (i+1-kmp[i])*((i+1)/ (i+1-kmp[i]))) max=i+1;
}
fprintf(g,"%d\n",max);
}
void solve(void){
int i;int j;int n;
for(i=1;i<=t;i++){
fscanf(f,"%s\n",c);
n=strlen(c);
knuthmp(c,n);
}
}
int main(void){
read();
solve();
return 0;
}