Cod sursa(job #2480209)

Utilizator Mada2003Madalina Scarlat Mada2003 Data 25 octombrie 2019 05:50:44
Problema PScPld Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <cstring>

using namespace std;

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

long long int mij, sum, n, st, jdr, jst, dr, k = -1;
long long int v[4000005];
char c[4000005];
string s;

int main()
{
    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);
            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
        {
            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;

}