Cod sursa(job #1068898)

Utilizator sebinechitasebi nechita sebinechita Data 28 decembrie 2013 22:11:49
Problema PScPld Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
#define MAX 10011000

char a[MAX], s[2*MAX+1];
int p[2*MAX+1];
int i, S;
int main()
{
    fin>>a;
    s[0]='&';
    s[1]='#';

    for(i=0;a[i]!='\0';i++)
    {
        s[2*i+2]=a[i];
        s[2*i+3]=s[1];
    }
    int id=0, mx=0;
    p[id]=0;
    for(i=1;s[i]!='\0';i++)
    {
        if(mx-i>0)
        {
            if(mx-i>=p[2*id-i])
            {
                p[i]=p[2*id-i];
            }
            else
                p[i]=mx-i;
        }
        else
        {
            p[i]=1;
        }
        while(s[i+p[i]]==s[i-p[i]])
        {
            p[i]++;
        }
        if(i+p[i]>mx)
        {
            id=i;
            mx=id+p[id];
        }
    }

    for(i=1;s[i]!='\0';i++)
    {
        S+=p[i]/2;
        cout<<p[i]/2<<" ";
    }
    fout<<S;
}