Cod sursa(job #1746038)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 22 august 2016 17:33:39
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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" );

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

    fin.get( ch );
    while ( ch != '\n' ) {
        s.push_back( '#' );
        s.push_back( ch );

        fin.get( ch );
    }
    s.push_back( '#' );
    //s[0] = '%';

    cout << s << endl;

    c = r = 0;
    m = 0;
    for ( i = 1; i < s.size() - 1; 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 + 1 ) / 2;
    }

    fout << m;

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

    return 0;
}