Pagini recente » Cod sursa (job #1053915) | Cod sursa (job #3156214) | Cod sursa (job #937154) | Cod sursa (job #1764391) | Cod sursa (job #1756946)
#include<iostream>
#include<fstream>
#include<string>
#define DX 1000100
using namespace std;
fstream fin("prefix.in",ios::in),fout("prefix.out",ios::out);
int n,pre[DX],bif[DX];
string s,a;
void kmp();
int main()
{
int i;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>a;
s=' '+a;
kmp();
}
}
void kmp()
{
int poz=0,i,maxim=0;
bif[1]=1;
for(i=2;i<s.size();i++)
{
pre[i]=bif[i]=0;
while(poz && s[poz+1]!=s[i]) poz=pre[poz];
if(s[poz+1]==s[i]) poz++;
pre[i]=poz;
if(pre[i]==0)
bif[i]=i;
else
bif[i]=i-pre[i];
if(bif[pre[i]]==bif[i] || bif[i]==pre[i])
{
maxim=max(maxim,i);
}
else
{
if(pre[i]!=0) bif[i]=0;
}
}
fout<<maxim<<"\n";
}