Pagini recente » Cod sursa (job #2142852) | Cod sursa (job #1385436) | Cod sursa (job #2135805) | Cod sursa (job #1646688) | Cod sursa (job #1653258)
#include <cstdio>
#include <cstring>
using namespace std;
FILE *fin = freopen("prefix.in","r",stdin);
FILE *fout = freopen("prefix.out","w",stdout);
char S[1000010];
int p[1000010],T,rs,i,k,l,n,N;
int main(){
scanf("%d\n", &T);
while(T--){
gets(S + 1);
N = strlen(S + 1);
l = k = rs = n = p[1] = 0;
for(i = 2;i<=N;i++){
while(k && S[k+1] != S[i])
k = p[k];
if(S[k+1] == S[i]) k++;
p[i] = k;
if(k && i-k == l) n++;
else
if(k && i-k > l) l = i-k, n = 1;
else n = 0;
if(n && n >= l) rs = l*(n/l+1);
//fout << S[i] << ' ' << k << ' ' << l << ' ' << n << ' ' << rs << '\n';
}
printf("%d\n", i);
}
}