Cod sursa(job #993379)

Utilizator assa98Andrei Stanciu assa98 Data 3 septembrie 2013 18:40:08
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <cstdio>
#include <cstring>
using namespace std;

char s[1010],*p;
char str[110];

int val[30];

int fact();
int eval();
int termen();

int fact() {
    int res;
    if(*p=='(') {
        p++;
        res=eval();
        p++;
    }
    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=='N'&&*(p+1)=='O') {
        p+=4;
        res=!fact();
    }
    else {
        res=val[*p-'A'];
        p+=2;
    }
    return res;
}

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

int eval() {
    int res=termen();

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

int main() {
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    gets(s);
    int m;
    scanf("%d",&m);
    scanf(" %s ",str);
    for(int i=0;i<m;i++) {
        val[str[i]-'A']=1-val[str[i]-'A'];
        p=s;
        printf("%d",eval());
    }
    return 0;
}