Cod sursa(job #3226679)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 22 aprilie 2024 15:38:22
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

#define cin fin
#define cout fout

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

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

string a;
string s;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n,i,j;
    cin>>a;
    s.push_back('*');
    for(auto i:a)
    {
        s.push_back(i);
        s.push_back('*');
    }
    n=s.size();
    int st=0,dr=0,dist=0;
    for(i=0;i<n;i++)
    {
        if(i>dr)
            dist=1;
        else
            dist=min(dp[st+dr-i],dr-i);
        while(i+dist<n)
        {
            if(i-dist<0)
                break;
            if(s[i+dist]!=s[i-dist])
                break;
            dist++;
        }
        dp[i]=dist;
        if(dr<i+dist-1)
        {
            dr=i+dist-1;
            st=i-dist+1;
        }
    }
    long long kon=0;
    for(i=0;i<n;i++)
        kon+=dp[i]/2;
    cout<<kon;
    return 0;
}