Pagini recente » Istoria paginii utilizator/ucv-geornoiu-iordache-dumitrescu | Cod sursa (job #190721) | Cod sursa (job #2820972) | Cod sursa (job #3151097) | Cod sursa (job #1653231)
#include <bits/stdc++.h>
using namespace std;
char S[1000010];
int p[1000010];
int T,rs;
int i,k,l,n;
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
assert(freopen("prefix.in", "rt", stdin));
assert(freopen("prefix.out", "wt", stdout));
(cin >> T).ignore(1);
while(T--){
cin.getline(S+1,100003);
l = k = rs = n = p[1] = 0;
for(i = 2;S[i];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';
}
cout << rs << "\n";
}
}