Cod sursa(job #2760939)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 29 iunie 2021 17:23:37
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
ifstream in("pscpld.in");
ofstream out("pscpld.out");
int i,j,v[1000005],w[1000005],lim,dist,piv;
long long r;
string s;
int main()
{
    in>>s;
    for(i=0;i<s.size();i++)
    {
        int dist=min(lim-i,v[2*piv-i]);
        int st=i-dist;
        int dr=i+dist;
        while(st>=0&&dr<s.size()&&s[st]==s[dr])
        {
            st--;
            dr++;
            dist++;
        }
        if(dr>lim)
        {
            lim=dr;
            piv=i;
        }
        v[i]=dist;
        r=(long long)(r+v[i]);
    }
    lim=0;
    piv=0;
    for(i=0;i<s.size();i++)
    {
        int dist=max(min(lim-i-1,w[piv-i]),0);
        int st=i-dist;
        int dr=i+dist+1;
        while(st>=0&&dr<s.size()&&s[st]==s[dr])
        {
            st--;
            dr++;
            dist++;
        }
        if(dr>lim)
        {
            lim=dr;
            piv=2*i;
        }
        w[i]=dist;
        r=(long long)(r+w[i]);
    }
    out<<r;
}