Cod sursa(job #2226194)

Utilizator ContDeRacistAliniateEBlat ContDeRacist Data 29 iulie 2018 20:50:04
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 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] + '&';
    }
    int ans(1), p = 1;
    pi[1] = 2;
    pi[0] = 1;
    cout << "2 ";
    for (int i = 2; 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 += pi[i] / 2;
    }
    cout << ans;
    return 0;
}