Pagini recente » Cod sursa (job #2062438) | Cod sursa (job #512167) | Cod sursa (job #841537) | Rating tomoiaga tudor (tomoiagatudor) | Cod sursa (job #1497547)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = 1000 + 10;
int i , n , m , p;
int info[30];
char ch , S[Nmax];
string sir;
bool op2();
bool op3();
bool op1()
{
bool ret = op2();
if (sir[p] == '|')
p++, ret |= op2();
return ret;
}
bool op2()
{
bool ret = op3();
if (sir[p] == '&')
p++, ret &= op3();
return ret;
}
bool op3()
{
bool ret;
if (sir[p] == '!')
{
p++;
return 1 ^ op3();
}
if (sir[p] == '(')
p++, ret = op1(), p++;
else
ret = info[sir[p]-'A'], p++;
return ret;
}
int main()
{
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
gets(S+1); n = strlen(S+1);
info['Z'-'A'+2] = 1; sir = ' ';
for (i = 1; i <= n; ++i)
{
if (S[i] == ' ') continue;
if (!strncmp(S+i , "TRUE" , 4)) sir = sir + 'Z', sir[sir.size()-1] += 2, i += 3;
else if (!strncmp(S+i , "FALSE" , 5)) sir = sir + 'Z', sir[sir.size()-1] += 1, i += 4;
else if (!strncmp(S+i , "OR" , 2)) sir = sir + '|', i++;
else if (!strncmp(S+i , "AND" , 3)) sir = sir + '&', i += 2;
else if (!strncmp(S+i , "NOT" , 3)) sir = sir + '!', i += 2;
else sir = sir + S[i];
}
scanf("%d\n", &m);
for (i = 1; i <= m; ++i)
{
scanf("%c", &ch);
info[ch-'A'] ^= 1; p = 1;
printf("%d", op1());
}
return 0;
}