Pagini recente » Cod sursa (job #1419168) | Cod sursa (job #669150) | Cod sursa (job #1924296) | Cod sursa (job #1932601) | Cod sursa (job #2653559)
#include <bits/stdc++.h>
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
string s;
string a;
unsigned int p[4000000 + 7];
void solve()
{
p[1] = 0;
in >> a; s = '*' + a;
unsigned int k = 0;
//cout << s << endl;
for(unsigned int i = 2; i < s.size(); i++)
{
while(k > 0 && s[k+1] != s[i])
k = p[k];
if(s[k+1] == s[i])
k++;
p[i] = k;
//cout << p[i] << " ";
}
//cout << endl;
int maxim = 0;
for(int period = 1; 2*period < s.size(); period++)
{
if(p[2*period] == period)
{
//cout << period << endl;
for(int cnt_len = 2*period; cnt_len < s.size(); cnt_len+=period)
{
if(p[cnt_len]%period == 0 && p[cnt_len] > 0)
{
maxim = max(maxim, cnt_len);
}
else {
break;
}
}
}
}
out << maxim << endl;
}
int main()
{
int t; in >> t;
while(t--) solve();
}