Cod sursa(job #44492)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 31 martie 2007 14:55:04
Problema PScPld Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>
#define NMAX 2000020

char S[NMAX], s[1000010];
int V[NMAX], N;

int main()
{
        int i, j, max, poz=0, num, sum=0;

        freopen("pscpld.in", "r", stdin);
        gets(s);
        N = strlen(s);
        for (i = 0; i < N; i++)
            S[poz++] = s[i], S[poz++] = ' ';
        N = poz;

        poz = 0; max = 1;
        V[0] = 1; i = 1;

        while (i<N)
        {
                if (i-poz+1 <= max)
                {
                   j = poz-1;
                   while (i < poz+max) V[i++] = V[j--];
                }
                else
                {
                        j = num = 0;
                        while (S[i-j]==S[i+j] && i>=j)
                        {
                              if (S[i-j] != ' ') num++;
                              j++;
                        }
                        if ((S[i] == ' ' && j%2 == 0) || (S[i] !=' '))
                           V[i] = 2*num-((i+1)%2);
                        max = V[i]; poz = i;
                        i++;
                }
        }

        for (i = 0; i < N; i++) sum+=V[i];
        freopen("pscpld.out", "w", stdout);
        printf("%d\n", sum);

        return 0;
        
}