Pagini recente » Cod sursa (job #3209221) | Cod sursa (job #2464234) | Cod sursa (job #85704) | Cod sursa (job #641415) | Cod sursa (job #428303)
Cod sursa(job #428303)
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int n;
char exp[1024];
int val[56];
int eval(int a, int b) {
//2 parti
int p = 0;
int rez = -1;
if (exp[a] == ' ') return eval(a+1, b);
if (exp[b] == ' ') return eval(a, b-1);
for (int i = b; i >= a; --i) {
if (exp[i] == '(') {p++;continue;}
if (exp[i] == ')') {p--;continue;}
if (exp[i] == ' ') continue;
if (p == 0 && exp[i] == 'O' && (i + 1 <= b && exp[i+1] == 'R'))
return eval(a, i - 1) || eval(i+2, b);
if (p == 0 && exp[i] == 'A' && (i+1 <= b && exp[i+1] == 'N'))
return eval(a, i - 1) && eval(i+3, b);
}
if (exp[a] == '(') return eval(a+1, b-1);
if (exp[a] == 'T' && (a+1 <= b && exp[a+1] == 'R')) return 1;
if (exp[a] == 'F' && (a+1 <= b && exp[a+1] == 'A')) return 0;
if (exp[a] == 'N' && (a+1 <= b && exp[a+1] == 'O')) return !eval(a+3, b);
return val[exp[a]-'A'];
}
int main() {
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
cin.getline(exp, 1024);
string line = exp;
n = line.size();
int m;
scanf("%d", &m);
string linie;
cin >> linie;
for (int i = 0; i < linie.size(); ++i) {
val[linie[i]-'A'] ^= 1;
printf("%d", eval(0, n - 1));
}
printf("\n");
return 0;
}