Cod sursa(job #911412)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 11 martie 2013 16:57:26
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
FILE *f=fopen("pscpld.in","r"),*g=fopen("pscpld.out","w");
int x[2000005],i,j,k,centru;
char aux[1000005],s[2000005];
long long ras;
int main()
{
    fgets(aux,1000005,f);
    int n=strlen(aux);
    for(i=0;i<n;i++)
    {
        s[strlen(s)]=' ';
        s[strlen(s)]=aux[i];
    }
    int N=strlen(s);
    for(i=1,j=0;i<N;i++)
    {
        if(i>j)
        {
            for(++j;i+i>=j&&s[j]==s[(2*i)-j]&&j<N;j++);
            j--;
            x[i]=j-i;
            centru=i;
        }
        else
            if(x[2*centru-i]<j-i)
                x[i]=x[2*centru-i];
            else
            {
                for(k=1;j+k<N&&centru-k>=0&&s[j+k]==s[2*i-j-k];k++);
                x[i]=j-i+k-1;
                if(k>1)
                {
                    j+=k-1;
                    centru=i;
                }
            }
        ras+=x[i]/2;
    }
    fprintf(g,"%lld\n",ras+n-1);
    return 0;
}