Cod sursa(job #2957202)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 21 decembrie 2022 22:36:32
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("pscpld.in");
ofstream fout ("pscpld.out");

const int NMAX=2e6+5;
int dp[NMAX];

string v;
string s;

int main()
{
    int n,i,j,x=0,y=0,dist=0;
    long long kon=0;
    fin>>v;
    n=v.size();
    s.push_back('*');
    for(i=0;i<n;i++)
    {
        s.push_back(v[i]);
        s.push_back('*');
    }
    n=s.size();
    for(i=0;i<n;i++)
    {
        if(i>y)
            dist=1;
        if(i<=y)
            dist=min(y-i+1,dp[x+y-i]);
        while(i+dist<n)
        {
            if(i-dist<0)
                break;
            if(s[i-dist]!=s[i+dist])
                break;
            dist++;
        }
        dp[i]=dist;
        if(i+dist-1>y)
        {
            x=i-dist+1;
            y=i+dist-1;
        }
    }
    for(i=0;i<n;i++)
        kon+=dp[i]/2;
    fout<<kon;
    return 0;
}