Cod sursa(job #1496434)

Utilizator andreea_zahariaAndreea Zaharia andreea_zaharia Data 4 octombrie 2015 22:25:07
Problema Bool Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <cstdio>
#include <cstring>
#include <cctype>

const int LENMAX = 100010;
const int NMAX = 101;
bool val[LENMAX];
int N;

bool expresie (), factor(), termen ();
char s[NMAX];
char *poz;

bool NOT (char c) {
    if (c == '0') {
        return 1;
    }
    if (c == '1') {
        return 0;
    }
    if (val[c - 'A'] == 0) {
        return 1;
    }
    if (val[c - 'A'] == 1) {
        return 0;
    }
}

bool VAL (char c) {
    if (c == '0') {
        return 0;
    }
    if (c == '1') {
        return 1;
    }
    if (val[c - 'A'] == 0) {
        return 0;
    }
    if (val[c - 'A'] == 1) {
        return 1;
    }
}

bool expresie () {
    bool ans = termen ();
    while (*poz == 'O') {
        ++poz; ++poz;
        ans |= termen ();
    }
    return ans;
}

bool termen () {
    bool ans = factor ();
    while (*poz == 'A') {
        ++poz; ++poz; ++poz;
        ans &= factor ();
    }
    return ans;
}

bool factor () {
    bool ans = 0;
    if (*poz == '(') {
        ++poz;
        ans = expresie ();
        ++poz;
        return ans;
    }
    if (*poz == 'N') {
        ++poz; ++poz; ++poz;
        return NOT (*poz);
    }
    return VAL (*poz);
}

int main () {
    freopen ("bool.in", "r", stdin);
    freopen ("bool.out", "w", stdout);

    gets (s);
    poz = s;

    scanf ("%d ", &N);
    char C;
    for (int i = 1; i <= N; i++) {
        scanf ("%c", &C);
        val[C - 'A'] = NOT (C);
        poz = s;
        int ans = expresie ();
        printf ("%d", ans);
    }
    printf ("\n");

    return 0;
}