Pagini recente » Cod sursa (job #2647161) | Cod sursa (job #3206397) | Cod sursa (job #620282) | Cod sursa (job #729530) | Cod sursa (job #1877987)
#include <cstdio>
#include <cstring>
using namespace std;
char expr[10005], s[10005];
int v[30];
int pointer;
char curchar;
void readnextchar();
int OR();
int AND();
int NOT();
int VAR();
int main() {
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(expr);
int n, poz;
poz = 0;
n = strlen(expr);
for(int i = 0; i < n; ++ i) {
if(expr[i] == '(' || expr[i] == ')') {
s[poz++] = expr[i];
} else if( 'A' <= expr[i] && expr[i] <= 'Z' ) {
s[poz++] = expr[i];
if(i >= 2) {
if( ( expr[i - 2] == 'N' && expr[i] == 'T' ) || ( expr[i - 2] == 'A' && expr[i] == 'D' ) ) {
for(int j = 1; j <= 3; ++ j) {
-- poz;
s[poz] = NULL;
}
if(expr[i] == 'T')
s[poz++] = '*';
else
s[poz++] = '+';
}
}
if(i >= 1) {
if( expr[i - 1] == 'O' && expr[i] == 'R' ) {
for(int j = 1; j <= 2; ++ j) {
-- poz;
s[poz] = NULL;
}
s[poz++] = '-';
}
}
if(i >= 3) {
if( expr[i - 3] == 'T' && expr[i] == 'E' ) {
for(int j = 1; j <= 4; ++ j) {
-- poz;
s[poz] = NULL;
}
s[poz++] = '1';
}
}
if(i >= 4) {
if( expr[i - 4] == 'F' && expr[i] == 'E' ) {
for(int j = 1; j <= 5; ++ j) {
-- poz;
s[poz] = NULL;
}
s[poz++] = '0';
}
}
}
}
scanf("%d\n", &n);
gets(expr);
for(int i = 0; i < n; ++ i) {
pointer = 0;
readnextchar();
v[expr[i] - 'A'] = 1 - v[expr[i] - 'A'];
printf("%d", OR());
}
return 0;
}
void readnextchar() {
curchar = s[pointer++];
}
int OR() {
int val = AND();
if(curchar == '&') {
return val | OR();
} else {
return val;
}
}
int AND() {
int val = NOT();
if(curchar == '&') {
return val & AND();
} else {
return val;
}
}
int NOT() {
int rez;
if(curchar == '*') {
readnextchar();
rez = 1 - NOT();
} else {
rez = VAR();
}
return rez;
}
int VAR() {
int rez;
if( 'A' <= curchar && curchar <= 'Z') {
rez = v[curchar - 'A'];
readnextchar();
} else if(curchar == '(') {
readnextchar();
rez = OR();
readnextchar();
} else {
rez = curchar - '0';
}
return rez;
}