Cod sursa(job #1231110)

Utilizator RaduGabriel2012Dinu Radu RaduGabriel2012 Data 19 septembrie 2014 16:15:42
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("pscpld.in");
ofstream g("pscpld.out");
 char s[2000005],s2[1000005];
 int len,lung,sol[2000005],mid=0,lim,pas,k=0;

 long long res=0;

int main()
{ int i,len=0;
    f>>s2+1; lung=strlen(s2+1);

      for(i=1;i<=lung;i++)
       {
         len++; s[len]=s2[i];
         if (i<lung) {len++; s[len]='#';}
       }


    for(i=1;i<=len;i++)
    {
      if (sol[mid]>=i-mid) sol[i]=min(sol[mid-(i-mid)],lim-i);

       while(i-sol[i]-1>=1 && i+sol[i]+1<=len && s[i-sol[i]-1]==s[i+sol[i]+1])
         {sol[i]++;
           pas++;
         }
       if (i+sol[i]>lim) {lim=i+sol[i]; mid=i;}

    }

 for(i=1;i<=len;i++)
 {
   if (i%2==0)
    sol[i]=sol[i]/2+sol[i]%2;
     else sol[i]/=2;

     res+=sol[i]+(i%2);
 }


 g<<res;
    return 0;
}