Cod sursa(job #779959)

Utilizator visanrVisan Radu visanr Data 19 august 2012 16:44:31
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;


int v[1024], N;
char s[1024], *p, c;


int Eval();
int Term();
int Fact();

int Eval()
{
     int res = Term();
     while(*p == 'O' && *(p + 1) == 'R')
     {
              p += 3;
              res |= Term();
     }
     return res;
}


int Term()
{
     int res = Fact();
     while(*p == 'A' && *(p + 1) == 'N')
     {
              p += 4;
              res &= Fact();
     }
     return res;
}

int Fact()
{
     int res = 0;
     if(*p == 'N' && *(p + 1) == 'O') 
     {
           p += 4;
           res |= !Fact();
     }
     else if(*p == 'T' && *(p + 1) == 'R')
     {
          p += 5;
          res = 1;
     }
     else if(*p == 'F' && *(p + 1) == 'A')
     {
          p += 6;
          res = 0;
     }
     else if(*p == '(')
     {
          ++ p;
          res = Eval();
          ++ p;
     }
     else res = v[*p - 'A'], p += 2;
     return res;
}

int main()
{
    freopen("bool.in", "r", stdin);
    freopen("bool.out", "w", stdout);
    int i;
    gets(s);
    scanf("%i\n", &N);
    while(N --)
    {
            scanf("%c", &c);
            v[c - 'A'] = !v[c - 'A'];
            p = s;
            printf("%i", Eval());
    }
    return 0;
}