Cod sursa(job #1624058)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 1 martie 2016 23:54:50
Problema PScPld Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
# include <fstream>

using namespace std;

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

const int MAX = 1000010;
typedef struct { int p, u, v; }sir;

char str[MAX];
int sol;

sir per(int a, int b, int c) {
    sir X;
    X.v = a;
    X.p = b;
    X.u = c;
    return X;
}

void secventa(sir x) {
    if (x.p < 0 || str[x.u] == 0 || str[x.p] != str[x.u])
        return;

    if (x.p == x.u) {
        ++sol;
        return;
    }

    // cat timp elementul din stanga = elementul din dreapta si elementele fac parte din sir
    while ((str[x.p] == str[x.u]) && (x.p >= 0 && str[x.u] != 0))
        --x.p, ++x.u;

    x.p++;
    x.u--;
    x.v = x.u - x.p + 1;

    if (x.v == 0)
        return;

    ++sol;
}

int main() {
    fin.get(str, 1000010);

    // O(n*n)
    for (int i=0; str[i]; ++i) {
        secventa(per(0, i, i)); // pozitie impara
        secventa(per(0, i-1, i+1)); // pozitie impara
        secventa(per(0, i-1, i)); // pozitie para
    }


    fout << sol;
    return 0;
}