Cod sursa(job #980024)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 3 august 2013 18:47:25
Problema Prefix Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <string.h>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream f("prefix.in");
ofstream g("prefix.out");
int T,length,P[1000002];
bool Exist[1000002];
char Current[1000002];
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));
        f.getline(Current+1,1000000);
        length=strlen(Current+1);
        Count_Result();
        T--;
    }
}
int main()
{
    Read_and_Process();
    return 0;
}