Cod sursa(job #2069106)

Utilizator smatei16Matei Staicu smatei16 Data 18 noiembrie 2017 12:01:00
Problema Bool Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>

using namespace std;
bool aux,val[30];
char *p,s[1005],c;
int n,i,z;
bool eval();
bool termen();
bool factor();
bool  eval(){
bool r;
r=termen();
while(*p=='O' && *(p+1)=='R'){p+=3;r=r|termen();}
return r;
}
bool termen(){
bool r;
r=factor();
while(*p=='A' && *(p+1)=='N'){p+=4;r=r&factor();}
return r;
}
bool factor(){
bool r;
r=false;
if(*p=='('){p++;r=eval();p++;}
else if(*p=='T' && *(p+1)=='R'){r=true;p+=5;}
else if(*p=='F' && *(p+1)=='A'){r=false;p+=6;}
else if(*p=='N' && *(p+1)=='O'){p+=4;r=!factor();}
else {if(val[*p-'A']==false)r=false;else r=true;p+=2;}
return r;
}
int main()
{
    freopen("bool.in","r",stdin);
    freopen("bool.out","w",stdout);
    scanf("%c",&c);
    while(c!='\n'){s[z++]=c;scanf("%c",&c);}
    scanf("%d\n",&n);
    for(i=1;i<=n;i++){
    scanf("%c",&c);
    val[c-'A']=!val[c-'A'];
    p=s;
    aux=eval();
    if(aux)printf("1");
    else printf("0");
    }

    return 0;
}