Pagini recente » Cod sursa (job #2925557) | Cod sursa (job #348896) | Cod sursa (job #436012) | Cod sursa (job #1378256) | Cod sursa (job #979998)
Cod sursa(job #979998)
#include <fstream>
#include <string.h>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int T,length,P[1000000];
bool Exist[1000000];
char Current[1000000];
void Count_Result()
{
int i,q,maximum=0;
P[1]=0;
for(q=0,i=2;i<=length;i++)
{
while(q&&Current[q+1]!=Current[i])
q=P[q];
if(Current[q+1]==Current[i])
q++;
P[i]=q;
}
for(i=2;i<=length;i++)
{
if(P[i]>i/2)
P[i]-=2*P[i]-i;
if((i%2==0 && P[i]==i/2)||(Exist[i-P[i]]==1))
{
maximum=i;
Exist[i]=1;
}
}
g<<maximum<<"\n";
}
void Read_and_Process()
{
f>>T;
char ch;
f.get(ch);
while(T!=0)
{
memset(Exist,0,sizeof(Exist));
int i=1;
f.get(Current[1]);
while(Current[i]!='\n')
f.get(Current[++i]);
length=i;
Count_Result();
T--;
}
}
int main()
{
Read_and_Process();
return 0;
}