Cod sursa(job #2471348)

Utilizator cyg_contnr1Rares Burghelea cyg_contnr1 Data 10 octombrie 2019 19:44:35
Problema PScPld Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <cstring>
#define MAX = 2000005;

using namespace std;

ifstream cin("pscpld.in");
ofstream cout("pscpld.out");

int main()
{
    long long mij,sum,v[2*MAX],n,st,jdr,jst,dr,k=-1;
    char c[2*MAX];
    string s;
    cin >> s;
    n = s.size();
    n *= 2;
    for(int i = 0; i <= n; i += 2)
    {
        c[i] = '*';
        c[i+1] = s[++k];
    }
    for(int i=1; i <= 2*n; i++)
    {
        if(i <= dr){
            mij=st+dr-i;
            v[i]=min(v[mij],mij-st+1);
            int jdr=i+v[i],jst=i-v[i];
            while(jst>=0 && jdr<=n && c[jdr]==c[jst]){
                jdr++;
                jst--;
                v[i]++;
            }
            if(dr<i+v[i]-1){
                dr=i+v[i]-1;
                st=i-v[i]+1;
            }
        }
        else{
            int jdr = i, jst = i;
            while(jst>=0 && jdr<=n && c[jdr]==c[jst]){
                jdr++;
                jst--;
                v[i]++;
            }
            dr=i+v[i]-1;
            st=i-v[i]+1;
        }
    }
    for(int i=1;i<=n;i++)
        sum+=v[i]/2;
    cout<<sum;
    return 0;

}