Cod sursa(job #2226215)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 29 iulie 2018 21:20:37
Problema PScPld Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <fstream>

using namespace std;

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

int pi[2000008];

int main()
{
    string s;
    cin >> s;
    string m = "&";
    for (int i = 0; i < s.size(); ++i) {
        m = m + s[i] + '&';
    }
    long long ans(0);
    int p = 1;
    for (int i = 1; i < m.size() - 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 < m.size() && m[pi[i] + i] == m[i - pi[i]]) {
            ++pi[i];
            p = i;
        }
        ans += 1LL * pi[i] / 2;
    }
    cout << ans;
    return 0;
}