Pagini recente » Cod sursa (job #2922343) | Cod sursa (job #1119231) | Cod sursa (job #1178148) | Cod sursa (job #2785126) | Cod sursa (job #1653197)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
string S;
int p[1000100];
int T,rs;
int main(){
for(fin >> T;T--;){
fin >> S;
int N = S.length(),i,k,l,n;
l = k = rs = n = 0;
for(int i = 1;i<=N;i++) p[i] = 0;
for(i = 2;i<=N;i++){
while(k && S[k] != S[i-1])
k = p[k];
if(S[k] == S[i-1]) 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-1] << ' ' << k << ' ' << l << ' ' << n << ' ' << rs << '\n';
}
fout << rs << "\n";
}
}