Cod sursa(job #1279360)

Utilizator bogdanmarin69Bogdan Marin bogdanmarin69 Data 30 noiembrie 2014 09:31:56
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("pscpld.in");
ofstream fout("pscpld.out");
#define MAX 1000003
#define ll long long
char sir[MAX], s[2*MAX];
long long rez;
ll cate;
int n, v[2*MAX];
int main()
{
    int i, imax=1, lgmax=1;
    fin>>(sir+1);
    s[0] = '$';
    for(i=1; sir[i]!='\0'; i++)
    {
        s[++n] = sir[i];
        s[++n] = '#';
    }
    s[n] = '%';
    //fout<<s;
    v[1] = 1;
    for(i=2; i<n; i++)
    {
        if(imax+lgmax-1 >= i)
            v[i] = (v[2*imax-i] < imax+lgmax-i ) ? v[2*imax-i] : imax+lgmax-i;
        else
            v[i] = 1;
        while(s[i+v[i]] == s[i-v[i]])
            v[i]++;
        if(i+v[i] > imax+lgmax)
        {
            imax = i;
            lgmax = v[i];
        }
    }
    for(i=3; i<=n-3; i+=2)
        rez += (v[i]-1)/2;
    for(i=2; i<=n-2; i+=2)
        rez += (v[i]-1)/2;
    rez += n/2;
    fout<<rez;
}