Cod sursa(job #864446)

Utilizator tester9x9Tester9x9 tester9x9 Data 24 ianuarie 2013 23:15:11
Problema PScPld Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#define NM 2000010

using namespace std;

ifstream f("pscpld.in");
ofstream g("pscpld.out");

int N, M, K;
int i, j;
int C, R;
int P[NM];
int Sum[NM];
char AX[NM], S[NM];
long long VANS;

int main ()
{
    f >> AX+1;
    M=strlen(AX+1);

    for (i=1; i<=M; i++)
    {
        S[++N]=AX[i];
        if (i<M) S[++N]='#';
    }

    for (i=1; i<=N; i++)
    {
        Sum[i]=Sum[i-1]+(S[i]=='#');
        if (i<=R)
            P[i]=P[C-(i-C)];

        while (i+P[i]<=N && i-P[i]>=1 && S[i-P[i]]==S[i+P[i]]) P[i]++;
        P[i]--;

        if (P[i]>R)
        {
            C=i;
            R=P[i];
        }

        if (S[i]!='#') VANS++;
        VANS+=1LL*P[i]-(Sum[i-1]-Sum[i-P[i]-1]);
    }

    g << VANS << '\n';

    f.close();
    g.close();

    return 0;
}