Pagini recente » Cod sursa (job #2012436) | Cod sursa (job #1087940) | Cod sursa (job #2915056) | Cod sursa (job #2815431) | Cod sursa (job #416219)
Cod sursa(job #416219)
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 1000005;
int i , j , t , pi[maxn] , n , ans;
char s[maxn];
void prefix ()
{
int i , q = 0;
memset(pi,0,sizeof(pi));
pi[1]=0;
for( i = 2; i <= n ; ++i )
{
while ( q && s[q + 1] != s[i] ) q = pi[q];
if ( s[q + 1] == s[i] ) ++q;
pi[i] = q;
if ( i % ( i - pi[i] ) == 0 && q ) ans = i;
}
}
int main()
{
freopen("prefix.in","r",stdin);
freopen("prefix.out","w",stdout);
scanf ("%d\n", &t);
for (; t-- ; )
{
fgets ( s , maxn ,stdin);
n = strlen(s) - 1 , ans = 0;
for( i = n ; i >= 1 ; --i ) s[i] = s[i - 1];
prefix();
printf("%d\n",ans);
}
return 0;
}