Cod sursa(job #837791)

Utilizator mvcl3Marian Iacob mvcl3 Data 18 decembrie 2012 18:03:07
Problema Bool Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#define NMAX 5000
using namespace std;
ifstream f("bool.in"); ofstream g("bool.out");
int n;
bool b['Z' - 'A' + 1];
char s[NMAX], *p, c;
bool eval();
bool termen();
bool factor();
int main()
{
    f.getline(s, NMAX);
    f>>n;
    for(int i = 1; i <= n; ++i)
    {
        f>>c;
        b[c - 'A'] = !b[c - 'A'];
        p = s;
        g<<eval();
    }
    g.close();
    return 0;
}
bool eval()
{
    bool r = factor();
    while(*p == 'A' && *(p + 1) == 'N')
    {
        p += 4;
        r = r & factor();
    }
    return r;
}
bool factor()
{
    bool r = termen();
    while(*p == 'O' && *(p + 1) == 'R')
    {
        p += 3;
        r = r | termen();
    }
    return r;
}
bool termen()
{
    bool r = 0;
    if(*p == '(')
    {
        ++p;
        r = eval();
        ++p;
    }
    else
    if(*p == 'T' && *(p + 1) =='R')
    {
        p += 5;
        r = 1;
    }
    else
    if(*p == 'F' && *(p + 1) == 'A')
    {
        p += 6;
        r = 0;
    }
    else
    if(*p == 'N' && *(p + 1) == 'O')
    {
        p += 4;
        r = !termen();
    }
    else
    {
        r = b[*p - 'A'];
        p += 2;
    }
    return r;
}