Pagini recente » Cod sursa (job #1929688) | Cod sursa (job #1467172) | Cod sursa (job #1893942) | Cod sursa (job #1060455) | Cod sursa (job #2951234)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int LIM = 1e6;
string s;
int n, cnt, sol;
int lung, pref[LIM + 5];
int main (){
ios_base::sync_with_stdio(false);
fin.tie(nullptr), fout.tie(nullptr);
int teste;
fin>>teste;
while(teste--){
fin>>s;
s = " " + s, n = (int)s.size() - 1;
lung = 0;
pref[1] = 0;
for(int i=2; i<=n; i++){
while(lung > 0 && s[lung+1] != s[i])
lung = pref[lung];
if(s[lung+1] == s[i])
lung++;
pref[i] = lung;
}
/**
ab ab ab ab
00 12 34 56
**/
sol = 0;
for(int i=1; 2*i<=n; i++){
cnt = 1;
for(int j=2*i; j<=n; j+=i){
if(pref[j] == j-i)
cnt++;
else
break;
}
if(cnt >= 2)
sol = max(sol, cnt * i);
}
fout<<sol<<"\n";
}
return 0;
}