Cod sursa(job #979882)

Utilizator Impaler_009Mihai Nitu Impaler_009 Data 3 august 2013 04:13:12
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 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'&&s[i+2]=='D')
    {
        i+=3;
        res &= pr3();
    }
    return res;
}

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

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

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;
}