Cod sursa(job #2502895)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 1 decembrie 2019 19:41:36
Problema PScPld Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <bits/stdc++.h>

using namespace std;

long long mij,ans,n,st,dr,k;

long long v[4000005];

char str[4000005],str2[4000001];

int main()
{
    ifstream fin("pscpld.in");
    ofstream fout("pscpld.out");
    fin.getline(str2,1000001);
    n=strlen(str2);
    n*=2;
    for(int i=0; i<=n; i+=2)
    {
        str[i]='$';
        str[i+1]=str2[k++];
    }
    for(int i=1; i<=2*n; ++i)
    {
        int j,j2;
        if(i<=dr)
        {
            mij=st+dr-i;
            v[i]=min(v[mij],mij-st+1);
            j=i+v[i];
            j2=i-v[i];
            while(j2>=0 && j<=n && str[j]==str[j2])
            {
                j++;
                j2--;
                v[i]++;
            }
            if(dr<i+v[i]-1)
            {
                dr=i+v[i]-1;
                st=i-v[i]+1;
            }
        }
        else
        {
            j=i;
            j2=i;
            while(j2>=0 && j<=n && str[j]==str[j2])
            {
                j++;
                j2--;
                v[i]++;
            }
            dr=i+v[i]-1;
            st=i-v[i]+1;
        }
        ans+=v[i]/2;
    }
    fout<<ans;
    return 0;

}