Pagini recente » Cod sursa (job #1083378) | Cod sursa (job #3322413) | Cod sursa (job #2152840) | Cod sursa (job #3311430) | Cod sursa (job #3311175)
#include <bits/stdc++.h>
#define NMAX 1000000
using namespace std;
ifstream in("prefix.in");
ofstream out("prefix.out");
int pi[NMAX];
int max_prefix(string s) ///lungimea prefixului periodic de lungime maxima a lui s
{
int l_prefix=0;
pi[0]=l_prefix;
int max_prefix=0;
for(int i=1; i<(int)s.size(); i++)
{
while(l_prefix>0 && s[l_prefix]!=s[i])
{
l_prefix=pi[l_prefix-1];
}
if(s[l_prefix]==s[i])
{
l_prefix++;
}
pi[i]=l_prefix;
if(l_prefix!=0 && (i+1)%(i+1-l_prefix)==0)
max_prefix=max(max_prefix, i+1);
}
return max_prefix;
}
int main()
{
int t;
in >> t;
while(t--)
{
string s;
in >> s;
out << max_prefix(s) << "\n";
}
return 0;
}