Cod sursa(job #2152902)

Utilizator usureluflorianUsurelu Florian-Robert usureluflorian Data 5 martie 2018 21:00:52
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <fstream>
using namespace std;
ifstream f ("pscpld.in");
ofstream g ("pscpld.out");
char a,s[3000001];
int p[3000001],n,c,r,mir;
long long sol;
int main()
{
      s[0]='#';
      while(f>>a)
      {
            s[++n]=a;
            s[++n]='#';
      }
      --n;
      c=1;
      p[1]=1;
      r=1;
      for(int i=1;i<=n;++i)
      {
           mir=c-(i-c);
           p[i]=min(r-i,p[mir]);
           while(s[i+p[i]]==s[i-p[i]]&&(i+p[i])<=n&&(i-p[i])>0) ++p[i];
           if(p[i]+i>r)
           {
                 r=p[i]+i;
                 c=i;
           }
      }
      for(int i=1;i<=n;++i)
      {
            --p[i];
            p[i]=p[i]/2+i%2;
            sol+=1ll*p[i];
      }
      g<<sol;
      return 0;
}