Pagini recente » Cod sursa (job #2490915) | Cod sursa (job #1190634) | Cod sursa (job #702172) | Cod sursa (job #2384994) | Cod sursa (job #911112)
Cod sursa(job #911112)
#include <cstdio>
#include <cstring>
using namespace std;
char buffer[1005];
char buf[1005];
bool val[256];
int id,len;
bool eand();
bool eor();
bool eval();
bool eor() {
bool r1,r2;
r1 = eand();
while (buf[id] == '|') {
id++;
r2 = eand();
r1 = r1 || r2;
}
return r1;
}
bool eand() {
bool r1,r2;
r1 = eval();
while (buf[id] == '&') {
id++;
r2 = eval();
r1 = r1 && r2;
}
return r1;
}
bool eval() {
bool notted = false;
bool r;
while (buf[id] == '!') {
notted = !notted;
id++;
}
if (buf[id] == '(') {
id++;
r = eor();
id++;
} else if ('A' <= buf[id] && buf[id] <= 'Z') {
r = val[buf[id]];
} else if (buf[id] == 1) r = true;
else if (buf[id] == 0) r = false;
if (notted) return !r;
else return r;
}
int main() {
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
fgets(buffer,1001,stdin);
len = strlen(buffer);
for (int i=0;i<len;i++) {
if ('A' <= buffer[i] && buffer[i] <= 'Z' && (buffer[i+1] <= 'A' || buffer[i+1] >= 'Z')) {
buf[id++] = buffer[i];
continue;
}
if (buffer[i] == 'A' && buffer[i+1] == 'N' && buffer[i+2] == 'D') {
buf[id++] = '&';
i += 2;
continue;
}
if (buffer[i] == 'N' && buffer[i+1] == 'O' && buffer[i+2] == 'T') {
buf[id++] = '!';
i += 2;
continue;
}
if (buffer[i] == 'O' && buffer[i+1] == 'R') {
buf[id++] = '|';
i++;
continue;
}
if (buffer[i] == 'T' && buffer[i+1] == 'R' && buffer[i+2] == 'U' && buffer[i+3] == 'E') {
buf[id++] = '1';
i += 3;
continue;
}
if (buffer[i] == 'F' && buffer[i+1] == 'A' && buffer[i+2] == 'L' && buffer[i+3] == 'S' && buffer[i+4] == 'E') {
buf[id++] = '0';
i += 4;
continue;
}
if (buffer[i] == '(' || buffer[i] == ')') {
buf[id++] = buffer[i];
}
}
int t; id = 0;
scanf("%d",&t);
while (t--) {
id = 0;
char crt = 0;
while ('A' > crt || crt > 'Z') scanf("%c",&crt);
val[crt] = !val[crt];
printf("%d",(eval())?(1):(0));
}
printf("\n");
return 0;
}