Cod sursa(job #177284)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 12 aprilie 2008 17:09:36
Problema Bool Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <string.h>
#define sigma 26

char S[2005],*p,ch;
long n,i,a[27],l,q;

long termen();
long factor();

long eval(){
     long t=termen();
     while (*p=='O'&&*(p+1)=='R'){
           p+=2;
           t|=termen();
     }
     return t;
}

long termen(){
     long f=factor();
     while (*p=='A'&&*(p+1)=='N'){
           p+=3;
           f&=factor();
     }
     return f;
}

long factor(){
     long poz=1,t;
     if (*p=='N' && *(p+1)=='O'){
        p+=3;
        poz=0;
        t=eval();
     }
     else
         if (*p=='('){
            p++;
            t=eval();
            p++;
         }
         else
             if (*p=='T' && *(p+1)=='R'){p+=4;t=1;}
             else if (*p=='F' && *(p+1)=='A'){p+=5;t=0;}
                  else {t=a[*p-'A'];p++;}
     if (poz) return t;
     else return (t>0)?0:1;
}

int main(){
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    
    gets(S);
    l=strlen(S);
    q=-1;
    for (i=0;i<l;i++)
        if(S[i]!=' ')S[++q]=S[i];
    S[++q]=0;
    
    //initializare
    for (i=0;i<sigma;i++)a[i]=0;
    
    scanf("%ld\n",&n);
    for (i=1;i<=n;i++){
        scanf("%c",&ch);
        if (a[ch-'A'])a[ch-'A']=0;
        else a[ch-'A']=1;
        p=S;
        printf("%ld",eval());
    }
    printf("\n");

return 0;
}