Cod sursa(job #2226218)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 29 iulie 2018 21:25:45
Problema PScPld Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>

using namespace std;

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

int pi[2000008];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    char m[2000008];
    int n(0);
    m[n++] = '&';
    while (cin >> m[n++]) {
        m[n++] = '&';
    }
    long long ans(0);
    int p = 1;
    for (int i = 1; i < n - 1; ++i) {
        if (p + pi[p] > i) {
            int sim = 2 * p - i;
            pi[i] = min(pi[sim], p + pi[p] - i);
        }
        while (pi[i] <= i && pi[i] + i < n && m[pi[i] + i] == m[i - pi[i]]) {
            ++pi[i];
            p = i;
        }
        ans += 1LL * pi[i] / 2;
    }
    cout << ans;
    return 0;
}