Pagini recente » Cod sursa (job #1963107) | Cod sursa (job #1978189) | Cod sursa (job #1473803) | Cod sursa (job #2770679) | Cod sursa (job #2808504)
#include <bits/stdc++.h>
using namespace std;
int const N = 1e6 + 3;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
int z [N];
char s [N];
int main()
{
int t;
fin >> t;
while (t --){
fin >> s;
int n = strlen (s);
fill (z , z + N , 0);
int l (0) , r (0);
for(int i = 1 ; i < n ; ++ i){
if (i <= r)
z [i] = min (z [i - l] , r - i + 1);
while (i + z [i] < n && s [z [i]] == s [z [i] + i])
++ z [i];
if (i + z [i] - 1 > r){
r = i + z [i] - 1;
l = i;
}
}
int ans (0);
for(int i = 1 ; i <= n ; ++ i){
int j = 0;
while (j + i < n && z [j + i] >= i)
j += i;
if (j)
ans = max (ans , j + i);
}
fout << ans << '\n';
}
return 0;
}