Cod sursa(job #1576766)

Utilizator redcrocodileIlies Andreea redcrocodile Data 22 ianuarie 2016 20:16:10
Problema PScPld Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
string s;
char x;
int dre,stg,i,mij,n,d[2000003];
long long numar;
void pali1()
{
   mij=i; stg=dre=i;
   while(s[dre+1]==s[stg-1] and dre+1<n and stg-1>=0)
    {dre++; stg--;}
   d[i]=dre-mij;
}
void pali2()
{
   d[i]=min(d[2*mij-i],dre-i);
   if(d[i]==dre-i)
   {
     mij=i; stg=dre=i;
     while(s[dre+1]==s[stg-1] and dre+1<n and stg-1>=0)
      {dre++; stg--;}
     d[i]=dre-mij;
   }
}
int main()
{
    while(f>>x)
    {
        s=s+x+"1";
    }
    n=s.length()-1;
    numar=(n+1)/2;
    dre=0; mij=0; d[0]=0;  //g<<d[0]<<" ";
    for(i=1;i<n;i++)
      {if(dre<i) pali1();
      else pali2();
      numar+=(d[i]+i%2)/2; //g<<d[i]<<" ";
      }
    g<<numar;
    return 0;
}