Pagini recente » Cod sursa (job #1532040) | Cod sursa (job #2707074) | Cod sursa (job #1598645) | Cod sursa (job #2990970) | Cod sursa (job #2720544)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1004;
int n, poz;
char a[NMAX + 1], b[NMAX + 1], x;
bool vals[255];
void constr() {
vals['0'] = 0, vals['1'] = 1;
for(int i = 0; b[i]; ++i) {
if(b[i] == ' ') continue;
if(b[i + 1] && isalpha(b[i]) && isalpha(b[i + 1])) {
if(b[i] == 'A') a[poz++] = '&', i += 3; //and
else if(b[i] == 'O') a[poz++] = '|', i += 2; //or
else if(b[i] == 'N') a[poz++] = '~', i += 3; //not
else if(b[i] == 'T') a[poz++] = '1', i += 4; //true
else if(b[i] == 'F') a[poz++] = '0', i += 5; //false
} else a[poz++] = b[i];
}
}
inline bool evalOr();
inline bool evalAnd();
inline bool evalNot();
inline bool eval() {
poz = 0;
return evalOr();
}
inline bool evalOr() {
bool prec = evalAnd();
while(a[poz] == '|') ++poz, prec |= evalAnd();
return prec;
}
inline bool evalAnd() {
bool prec = evalNot();
while(a[poz] == '&') ++poz, prec &= evalNot();
return prec;
}
inline bool evalNot() {
bool nots = 0;
while(a[poz] == '~') ++poz, nots ^= 1;
if(a[poz] == '(') {
++poz;
const bool crt = evalOr();
++poz;
return crt ^ nots;
}
const bool crt = vals[a[poz++]];
return crt ^ nots;
}
int main()
{
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
cin.getline(b, NMAX + 1), constr(), scanf(" %d", &n);
//a[poz] = 0, cout<<a<<"\n";
while(n--)
scanf(" %c", &x), vals[x] ^= 1,
printf("%d", eval());
return 0;
}