Cod sursa(job #1447820)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 5 iunie 2015 14:29:34
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");

int L[30],N;
char S[2000],C,*P;

int Term();
int Fact();

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

int Term()
{
    int R = Fact();
    while (*P == 'A' && *(P+1) == 'N' && *(P+2) == 'D')
    {
        P += 4;
        R = R & Fact();
    }
    return R;
}

int Fact()
{
    int R = 0;
    if (*P == 'N' && *(P+1) == 'O' && *(P+2) == 'T')
    {
        P += 4;
        R = Fact();
        return !R;
    }
    else
    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
     {
         R = L[*P - 'A'];
         P += 2;
     }

   return R;
}

int main()
{
     fin.getline(S,2000);
     fin >> N;
     for (int i = 1;i <= N;i++)
     {
         fin >> C;
         L[C - 'A'] = 1 - L[C - 'A'];
         P = S;
         fout << Eval();
     }
    return 0;
}