Pagini recente » Cod sursa (job #1909610) | Cod sursa (job #2323662) | Cod sursa (job #1269811) | Cod sursa (job #1077012) | Cod sursa (job #1469526)
#include <cstdio>
#include <cstring>
using namespace std;
const char iname[] = "prefix.in";
const char oname[] = "prefix.out";
const int lmax = 1000005;
int pr[lmax];
char P[lmax];
int getPrefix()
{
memset(pr,0,lmax*sizeof(int));
int poz = 0, dim = 0;
pr[0] = -1;
int m = strlen(P);
int k = -1;
for(int q = 1; q < m; q++)
{
while(k>-1 && P[k+1] != P[q])
k = pr[k];
if(P[k+1] == P[q])
k++;
if(k + 1 == 1) poz = q;
if((poz > 0) && (k+1 > 0) &&((k+1)%poz == 0)) dim = q+1;
pr[q] = k;
}
return dim;
}
int main()
{
freopen(iname,"r",stdin);
freopen(oname, "w", stdout);
int T;
scanf("%d\n", &T);
for(int q = 0; q < T; q++)
{
memset(P,0,lmax);
scanf("%s\n",P);
printf("%d\n", getPrefix());
}
return 0;
}