Pagini recente » Cod sursa (job #293232) | Cod sursa (job #755416) | Cod sursa (job #712154) | Cod sursa (job #2299792) | Cod sursa (job #1164265)
#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;
}
for(i=1;i<=n-1;i++) if (kmp[i] != 0 && (i+1)%(i+1-kmp[i]) == 0) 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;
}