Pagini recente » Cod sursa (job #2630443) | Cod sursa (job #1422450) | Cod sursa (job #660452) | Cod sursa (job #319500) | Cod sursa (job #428353)
Cod sursa(job #428353)
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int n;
string expresie;
int val[56];
int eval(string exp) {
//2 parti
int p = 0;
if (exp == "TRUE") return 1;
if (exp == "FALSE") return 0;
if (exp.size() == 1) return val[exp[0]-'A'];
string lst="";
int ret = 1, op = 1, solved = 0;
for (int i = 0; i < exp.size(); ++i) {
if (exp[i] == '(') {++p; lst += '('; continue;}
if (exp[i] == ')') {--p; lst += ')'; continue;}
if (p == 0 && exp[i] == 'A' && (i+1 < exp.size() && exp[i+1] == 'N')) {
if (op == 1) ret &= eval(lst);
else ret |= eval(lst);
solved = 1;
op = 1; lst = "";i+=2;continue;
}
if (p == 0 && exp[i] == 'O' && (i+1 < exp.size() && exp[i+1] ==
'R')) {
if (op == 1) ret &= eval(lst);
else ret |= eval(lst);
solved = 1;
op = 0; lst = ""; i++;continue;
}
lst += exp[i];
}
if (solved == 1) {
if (op == 1) return ret&eval(lst);
return ret|eval(lst);
}
p = exp.size();
if (exp[0] == 'N' && exp[1] == 'O') return !eval(exp.substr(3));
return eval(exp.substr(1, p - 2));
}
int main() {
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
char exp2[1024];
gets(exp2);
string line = exp2;
for (int i = 0; i < line.size(); ++i) if (line[i] != ' ') {
expresie += line[i];
}
int m;
scanf("%d\n", &m);
string linie;
cin >> linie;
for (int i = 0; i < linie.size(); ++i) {
val[linie[i]-'A'] ^= 1;
printf("%d", eval(expresie));
}
printf("\n");
return 0;
}