Pagini recente » Borderou de evaluare (job #1038516) | Borderou de evaluare (job #987824) | Borderou de evaluare (job #2016564) | Borderou de evaluare (job #2923221) | Cod sursa (job #3309167)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("prefix.in");
ofstream fout("prefix.out");
const int NMAX=1e6+5;
int lps[NMAX];
void prebuilt(string pattern)
{
for(int i=0;i<=pattern.size();i++)lps[i]=0;
lps[0]=0;
int i=1;
int length=0;
int m=pattern.size();
while(i<m)
{
if(pattern[i]==pattern[length])
{
length++;
lps[i]=length;
i++;
}
else
{
if(length>0)
{
length=lps[length-1];
}
else
{
lps[i]=0;
i++;
}
}
}
}
void solve()
{
string a;
fin>>a;
prebuilt(a);
int ans=0;
for(int i=0;i<a.size();i++)
{
int k=i+1-lps[i];
if((i+1)%k==0 && lps[i]>0 && k>0)ans=i+1;
}
fout<<ans<<'\n';
}
int main()
{
int t;
fin>>t;
while(t--)
{
solve();
}
}