Cod sursa(job #990522)
#include <stdio.h>
#include <string.h>
#define NMAX 1010
char a[NMAX], b[NMAX];
int n, m, k, poz, p;
bool c[NMAX], Ans;
bool termen();
bool factor();
bool expr() {
bool Ans = termen();
while (a[p] == 'O' && a[p + 1] == 'R'){/// OR
p += 3;
Ans = Ans | termen();
}
return Ans;
}
bool termen() {
bool Ans = factor();
while (a[p] == 'A' && a[p + 1] == 'N'){/// AND
p += 4;
Ans = Ans & factor();
}
return Ans;
}
bool factor(){
bool Ans;
if (a[p] == '('){
++ p;
Ans = expr();
++ p;
}
else
if (a[p] == 'N' && a[p + 1] == 'O'){/// NOT
p += 4;
Ans = ! factor();
}
else
if (a[p] == 'T' && a[p + 1] == 'R'){/// TRUE
Ans = 1;
p += 5;
}
else
if (a[p] == 'F' && a[p + 1] == 'A'){/// FALSE
Ans = 0;
p += 6;
}
else{
Ans = c[a[p] - 'A'];
p += 2;
}
return Ans;
}
int main(){
freopen("bool.in", "r", stdin);
freopen("bool.out", "w", stdout);
gets(a);
n = strlen(a);
m = -1;
for(int i = 0; i < n; ++ i){
b[++ m] = a[i];
while(a[i] == a[i + 1] && a[i + 1] == ' ' && i < n)
++ i;
}
b[++ m] = '\0';
strcpy(a, b);
scanf("%d\n", &n);
scanf("%s", b);
for(int i = 0; i < n; i++) {
c[b[i] - 65] = 1 - c[b[i] - 65];
p = 0;
Ans = expr();
printf("%d", Ans);
}
printf("\n");
return 0;
}