Cod sursa(job #1826381)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 10 decembrie 2016 13:13:48
Problema PScPld Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
# include <iostream>
# include <fstream>

# include <string.h>

# define MAX_LEN 3000000

using namespace std;

int h[MAX_LEN];

int main() {
    ifstream fin( "pscpld.in" );
    ofstream fout( "pscpld.out" );

    ios::sync_with_stdio( false );

    int i, c, r, t;
    long long m;
    char ch;
    string s;

    s.push_back( '^' );
    fin.get( ch );
    while ( 'a' <= ch && ch <= 'z' ) {
        s.push_back( '#' );
        s.push_back( ch );

        fin.get( ch );
    }
    s.push_back( '#' );
    s.push_back( '*' );

    c = r = 0;
    m = 0;
    for ( i = 2; i < s.size() - 2; i ++ ) {
        if ( i >= r )
            t = 0;
        else
            t = h[c - ( i - c )];

        while ( s[i + t] == s[i - t] )
            t ++;
        t --;

        h[i] = t;
        if ( i + t > r ) {
            r = i + t;
            c = i;
        }

        m += t / 2 + 1 - i % 2;
    }

    fout << m;

    fin.close();
    fout.close();

    return 0;
}