Pagini recente » Cod sursa (job #3270769) | Cod sursa (job #481065) | Cod sursa (job #1458626) | Cod sursa (job #1119380) | Cod sursa (job #1641944)
#include <bits/stdc++.h>
#define DIM 1005
#define NMAX 105
FILE *fin = freopen("bool.in", "r", stdin);
FILE *fout = freopen("bool.out", "w", stdout);
using namespace std;
int n;
char s[DIM], *p, sw[NMAX];
bool v[28];
bool OR();
bool AND();
bool NOT();
bool FACT();
bool OR()
{
bool val = AND();
if(*p == ' ') ++ p;
while(*p == 'O')
{
p += 2;
if(*p == ' ') ++ p;
val = val | AND();
}
return val;
}
bool AND()
{
bool val = NOT();
if(*p == ' ') ++ p;
while(*p == 'N')
{
p += 3;
if(*p == ' ') ++ p;
val = val & NOT();
}
return val;
}
bool NOT()
{
bool val = FACT();
if(*p == ' ') ++ p;
while(*p == 'N')
{
p += 3;
if(*p == ' ') ++ p;
val = ~FACT();
}
return val;
}
bool FACT()
{
bool val = 0;
if(*p == ' ') ++ p;
if(*p == '(')
{
++ p;
val = OR();
if(*p == ' ') ++ p;
++ p;
}
if(*p == 'T')
{
val = 1;
p += 4;
}
if(*p == 'F')
{
val = 0;
p += 5;
}
if(*p >= 'A' && *p <= 'Z')
{
val = v[*p - 'A'];
++ p;
if(*p == ' ') ++ p;
}
return val;
}
void read()
{
gets(s);
scanf("%d\n", &n);
gets(sw);
}
void solution()
{
if(n)
for(int i = 0; i < n; ++ i)
{
p = s;
v[sw[i] - 'A'] = v[sw[i] - 'A'] ^ 1;
printf("%d", OR());
}
else printf("%d", OR());
}
int main()
{
read();
solution();
return 0;
}