Pagini recente » Solutii Autumn Warmup, Runda 3 | Cod sursa (job #1885244) | Cod sursa (job #2226871) | Cod sursa (job #2834089) | Cod sursa (job #1839261)
#include <cstdio>
#include <cstring>
#define NMax 1005
char s[NMax+1];
char e[NMax+1];
char t[256];
int p,nr,lg,T;
int Expr();
int NOT();
int AND();
int OR();
void Read()
{
fgets(s,NMax,stdin);
nr = strlen(s)-1;
for(int i = 0; i < nr; )
if( s[i] == ' ' ) ++i;
else if( s[i] == 'A' && s[i+1] == 'N' ) e[lg++] = '&', i+=3;
else if( s[i] == 'O' && s[i+1] == 'R' ) e[lg++] = '|', i+=2;
else if( s[i] == 'N' && s[i+1] == 'O' ) e[lg++] = '~', i+=3;
else if( s[i] == 'T' && s[i+1] == 'R' ) e[lg++] = '1', i+=4;
else if( s[i] == 'F' && s[i+1] == 'A' ) e[lg++] = '0', i+=5;
else e[lg++] = s[i++];
}
int NOT()
{
int f;
if(e[p] == '(' ){
++p;
f = Expr();
++p;
} else {
if( e[p] == '1' || e[p] == '0' ) f = e[p] - '0';
else f = t[ e[p] ];
++p;
}
return f;
}
int AND()
{
int f,q=0;
if( e[p] == '~' ){
q = 1;
++p;
}
f = NOT();
return q ^ f;
}
int OR()
{
int t = AND();
while(p < lg && e[p] == '&')
{
++p;
t = t & AND();
}
return t;
}
int Expr()
{
int t = OR();
while(p < lg && e[p] == '|')
{
++p;
t = t | OR();
}
return t;
}
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
Read();
scanf("%d\n",&T);
while(T--)
{
char c;
scanf("%c",&c);
t[c] = 1-t[c];
printf("%d", Expr() );
p = 0;
}
return 0;
}