Cod sursa(job #1108712)

Utilizator RazvanR104Razvan-Andrei Ciocoiu RazvanR104 Data 16 februarie 2014 00:46:47
Problema Bool Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <cstring>

using namespace std;

char exp[1010];
bool val[30];
int pz;

int p_1();

int p_3()
{
    int v;
    if (strncmp(exp + pz, "TRUE", 4) == 0)
    {
        pz += 4;
        v = 1;
    }
    else if (strncmp(exp + pz, "FALSE", 5) == 0)
    {
        pz += 5;
        v = 0;
    }
    else if (strncmp(exp + pz, "NOT ", 4) == 0)
    {
        pz += 4;
        v = val[exp[pz++] - 'A'];
    }
    else if (exp[pz] >= 'A' && exp[pz] <= 'Z')
        v = val[exp[pz++] - 'A'];
    else if (exp[pz] == '(')
    {
        ++pz;
        v = p_1();
        ++pz;
    }
    return v;
}

int p_2()
{
    int val = p_3();
    while(strncmp(exp + pz, " AND ", 5) == 0)
    {
        pz += 5;
        val &= p_3();
    }
    return val;
}

int p_1()
{
    int val = p_2();
    while(strncmp(exp + pz, " OR ", 4) == 0)
    {
        pz += 4;
        val |= p_2();
    }
    return val;
}

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

    gets(exp);

    int i, N;
    char c;
    scanf("%d\n", &N);

    for (i = 0; i < N; ++i)
    {
        scanf("%c", &c);
        val[c - 'A'] = !val[c - 'A'];
        pz = 0;
        printf("%d", p_1());
    }

    printf("\n");
    fclose(stdout);
    return 0;
}