Pagini recente » Cod sursa (job #7979) | Monitorul de evaluare | Cod sursa (job #2695956) | Rating andrei (andreii) | Cod sursa (job #214066)
Cod sursa(job #214066)
#include <fstream>
#define MAX 2001000
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
char s[MAX];
int n;
int pp[MAX];
int mx=0;
int nr;
inline int maxim(int a,int b)
{
return a>b?a:b;
}
void pmk()
{
pp[1]=0;
int num=0;
for (int i=2;i<=n;i++)
{
while (num && s[num+1]!=s[i])
num=pp[num];
if (s[num+1]==s[i])
num++;
pp[i]=num;
}
}
void afish()
{
int p;
for(int i=1;i<=n;i++)
{
p=i-1;
if(pp[i]==1 && pp[i+p-1]==i-1)
{
if(mx<i-1)
mx=i+p-1;
i+=p-1;
while(pp[i] == i-p && i<=n)
{
mx=i;
i+=p;
}
}
}
fout<<mx<<"\n";
}
void citire()
{
int t;
fin>>t;
fin.getline(s,MAX);
for (int i=0;i<t;i++)
{
fin.getline(s+1,MAX);
if (s[strlen(s)-1]=='\n')
s[strlen(s)-1]=0;
n=strlen((s+1));
mx=0;
pmk();
afish();
memset(s,0,sizeof(s));
}
}
int main ()
{
citire();
return 0;
}