Pagini recente » Cod sursa (job #2812758) | Cod sursa (job #2333644) | Cod sursa (job #1858917) | Cod sursa (job #1853972) | Cod sursa (job #818819)
Cod sursa(job #818819)
#include <cstdio>
using namespace std;
char s[1010];
char *p;
bool val['Z'-'A'+5];
bool lowest_level();
bool eval2();
bool evaluate()
{
while(*p == ' ')
++p;
bool v1,v2;
v1 = eval2();
while(*p == ' ')
++p;
while(*p == 'O' && *(p+1) == 'R')
{
p+= 3;
v2 = eval2();
v1 = v1 || v2;
}
return v1;
}
bool eval2()
{
while(*p == ' ')
++p;
bool v1,v2;
v1 = lowest_level();
while(*p == ' ')
++p;
while(*p == 'A' && *(p+1) == 'N')
{
p+=4;
v2 = lowest_level();
v1 = v1 && v2;
}
return v1;
}
bool lowest_level()
{
bool ret;
while(*p == ' ')
++p;
if(*p == '(')
{
++p;
ret = evaluate();
++p;
}
else if(*p == 'T' && *(p+1) == 'R')
{
p+= 5;
ret = 1;
}
else if(*p == 'F' && *(p+1) == 'A')
{
p+= 6;
ret = 0;
}
else if(*p == 'N' && *(p+1) == 'O')
{
p+= 4;
ret = !lowest_level();
}
else if(*p >= 'A' && *p <= 'Z' && !(*(p+1) <= 'Z' && *(p+1) >= 'A'))
{
p+=2;
ret = val[*(p-2)-'A'];
}
return ret;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(s);
int n,i;
char c;
scanf("%d\n",&n);
for(i=1;i<=n;++i)
{
scanf("%c",&c);
val[c-'A']^=1;
p = s;
printf("%d",evaluate());
}
return 0;
}