Pagini recente » Cod sursa (job #1362900) | Cod sursa (job #492213) | Cod sursa (job #1764988) | Cod sursa (job #1225758) | Cod sursa (job #2150190)
#include <bits/stdc++.h>
using namespace std;
FILE *fi, *fout;
const int MAXN = 1010;
char str[MAXN + 1];
bool ok[256];
int pos, n;
bool OR();
inline void skip() {
while(pos <= n && str[pos] == ' ')
pos++;
}
bool get() {
skip();
bool ans;
if(str[pos] == '(') {
pos++;
ans = OR();
pos++;
}
else if(str[pos] == 'T' && str[pos + 1] == 'R') {
pos += 4;
ans = 1;
}
else if(str[pos] == 'F' && str[pos + 1] == 'A') {
pos += 5;
ans = 0;
}
else if(str[pos] == 'N' && str[pos + 1] == 'O') {
pos += 3;
ans = (get() ^ 1);
}
else {
ans = ok[str[pos]];
pos++;
}
skip();
return ans;
}
bool AND() {
skip();
bool ans = get();
skip();
while(pos <= n && str[pos] == 'A' && str[pos + 1] == 'N') {
pos += 3;
ans &= get();
skip();
}
return ans;
}
bool OR() {
skip();
bool ans = AND();
skip();
while(pos <= n && str[pos] == 'O' && str[pos + 1] == 'R') {
pos += 2;
ans |= AND();
skip();
}
return ans;
}
int main() {
int q;
fi = fopen("bool.in" ,"r");
fout = fopen("bool.out" ,"w");
fgets(str + 1, MAXN, fi);
n = strlen(str + 1);
fscanf(fi,"%d " ,&q);
while(q > 0) {
q--;
char ch = fgetc(fi);
ok[ch] ^= 1;
pos = 1;
fprintf(fout,"%d" ,OR());
}
fclose(fi);
fclose(fout);
return 0;
}