Cod sursa(job #979905)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 3 august 2013 11:59:00
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>

using namespace std;

char c;
char s[1001];
int status[40];
int i,n,u;

int pr2();int pr3();

int pr1 ()
{
    int res = pr2 ();
    while (s[i]=='O'&&s[i+1]=='R')
    {
        i+=2;
        res  |= pr2();
    }
    return res;
}

int pr2 ()
{
    int res = pr3 ();
    while (s[i]=='A'&&s[i+1]=='N')
    {
        i+=3;
        res &= pr3();
    }
    return res;
}

int pr3 ()
{
    if (s[i]=='(')
    {
        ++i;
        int res = pr1();
        ++i;
        return res;
    }

    if (s[i]=='N' && s[i+1]=='O'&&s[i+2]=='T') {i+=3; return !pr3();}
    if (s[i]=='T' && s[i+1]=='R')              {i+=4; return 1;}
    if (s[i]=='F' && s[i+1]=='A'&&s[i+2]=='L') {i+=5; return 0;}
    ++i; return  status [s[i-1]-'A'];
}

int main()
{
    freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
     while (1)
     {
       scanf("%c", &c);
       if (c==' ') continue;
       if(c == '\n') break;
       s[u++] = c;
     }

     scanf ("%d\n",&n);

     for (int j=1; j<=n; j++)
     {
         scanf ("%c",&c);
         status [c-'A'] = status[c-'A']^1;
         i = 0;
         printf ("%d",pr1());
     }
     return 0;
}