Cod sursa(job #473381)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 29 iulie 2010 11:50:21
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <fstream>
#include <stdio.h>
using namespace std;
long long suma;
char s[2000000];
int palindrom[2000000],i,n,pl;
int main()
{
    freopen("pscpld.in","r",stdin);
    ofstream fo("pscpld.out");
    while(1) { s[++n]=getchar(); if(s[n]=='\n') break; s[++n]=' '; }
    n-=2;
    for(i=1;i<=n;i++)
    {

                if((s[i]==' ')&&(s[i+1]==s[i-1])&&(i<n)&&(i>1)) { pl=palindrom[i]*2;
                                                                  pl++;
                                                                  while((i+pl<=n)&&(i-pl>=1))
                                                                  if(s[i+pl]==s[i-pl])
                                                                  {
                                                                      palindrom[i+pl-1]=palindrom[i-pl+1];
                                                                      palindrom[i+pl]=palindrom[i-pl];
                                                                      palindrom[i]++;
                                                                      pl+=2;
                                                                  } else break;
                                                                }
                if(s[i]!=' ')                                  {  if(!palindrom[i]) palindrom[i]=1;
                                                                  pl=palindrom[i]*2;
                                                                  while((i+pl<=n)&&(i-pl>=1))
                                                                  if(s[i+pl]==s[i-pl])
                                                                  {

                                                                      palindrom[i+pl-1]=palindrom[i-pl+1];
                                                                      palindrom[i+pl]=palindrom[i-pl];
                                                                      palindrom[i]++;
                                                                      pl+=2;
                                                                  } else break;
                                                                }



            suma+=palindrom[i];
    }
    fo<<suma<<"\n";
    fo.close();
    return 0;
}