Pagini recente » Cod sursa (job #1020200) | Cod sursa (job #1656350) | Cod sursa (job #1868746) | Cod sursa (job #2499438) | Cod sursa (job #1255201)
#include <cstdio>
#include <cstring>
using namespace std;
FILE *f=fopen ("prefix.in", "r");
FILE *g=fopen ("prefix.out", "w");
int pi[1000005];
char s[1000005];
void prefix (int lg){
int k=0;
pi[1]=0;
for(int i=2;i<=lg;++i){
while (k>0 && s[i]!=s[k+1]) k=pi[k];
if(s[i]==s[k+1]) k++;
pi[i]=k;
}
}
int main(){
int T,lg;
fscanf(f,"%d%*c",&T);
for (;T;--T){
fscanf (f,"%s%*c",s+1);
lg=strlen(s+1);
bool ok=0;
prefix (lg);
for(int i=lg;i>=1;--i){
if (pi[i]!=0 && i%(i-pi[i])==0 ){
fprintf(g,"%d\n",i);
ok=1;
break;
}
}
if(!ok) fprintf(g,"0\n");
}
return 0;
}