Pagini recente » Cod sursa (job #2763880) | Cod sursa (job #882935) | Cod sursa (job #54020) | Cod sursa (job #134609) | Cod sursa (job #246042)
Cod sursa(job #246042)
#include <cstdio>
#include <cstring>
const int MAX_X = 2010;
const int MAX_N = 210;
const int MAX_L = 26;
char s[MAX_X + 1], a[MAX_N + 1], *p, c[MAX_L];
int n, l;
int termen();
int factor();
int expr()
{
int t = termen();
for (; *p == 'O' && *(p + 1) == 'R'; p += 2, t |= termen());
return t;
}
int termen()
{
int f = factor();
for (; *p == 'A' && *(p + 1) == 'N'; p += 3, f &= factor());
return f;
}
int factor()
{
int ret;
if (*p == 'N' && *(p+1) == 'O')
{
p += 3;
ret = factor();
return !ret;
}
if (*p == '(')
{
++p;
ret = expr();
++p;
return ret;
}
if (*p == 'T' && *(p + 1) == 'R')
{
p += 4;
return 1;
}
if (*p == 'F' && *(p + 1) == 'A')
{
p += 5;
return 0;
}
ret = c[*p - 'A'];
++p;
return ret;
}
int main()
{
freopen("bool.in","rt",stdin);
freopen("bool.out","wt",stdout);
fgets(s, MAX_X, stdin);
l = strlen(s);
int z = 0;
for (int i = 0; i < l; ++i)
if (s[i] != ' ') s[z++] = s[i];
s[z] = '\0';
scanf("%d\n", &n);
fgets(a, MAX_N, stdin);
for (int i = 0; i < n; ++i)
{
c[a[i] - 'A'] = !c[a[i] - 'A'];
p = s;
printf("%d", expr());
}
}