Cod sursa(job #1799784)

Utilizator raluca1234Tudor Raluca raluca1234 Data 6 noiembrie 2016 19:52:24
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio>
#define totalLitere 26
#define MAX_S 1000
using namespace std;

char s[MAX_S+5], *p;
bool vc[totalLitere+5];

bool factor();
bool termen();

bool eval(){
    bool ans=factor();
    while (*p=='O' && *(p+1)=='R'){
        p+=2;
        ans|=factor();
    }
    if (*p==' ') p++;
    return ans;
}

bool factor(){
    if (*p==' ') p++;
    bool ans=termen();
    while (*p=='A' && *(p+1)=='N' && *(p+2)=='D'){
        p+=3;
        ans&=termen();
    }
    if (*p==' ') p++;
    return ans;
}

bool termen(){
    if (*p==' ') p++;
    bool ans;
    if (*p=='('){
        p++;
        ans=eval();
        p++;
    }else
        if (*p=='N' && *(p+1)=='O' && *(p+2)=='T'){
            p+=3;
            ans=!termen();
        }else
            if (*p=='T' && *(p+1)=='R' && *(p+2)=='U' && *(p+3)=='E'){
                p+=4;
                ans=true;
            }else
                if (*p=='F' && *(p+1)=='A' && *(p+2)=='L' && *(p+3)=='S' && *(p+4)=='E'){
                    p+=5;
                    ans=false;
                }else
                    if (*p>='A' && *p<='Z'){
                        ans=vc[*p-'A'];
                        p++;
                    }
    if (*p==' ') p++;
    return ans;
}

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