Pagini recente » Cod sursa (job #2899475) | Cod sursa (job #1380294) | Cod sursa (job #2020590) | Cod sursa (job #1171441) | Cod sursa (job #3134797)
#include <fstream>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
int i, k, q;
int v[132];
char s[1002], c[1002], p;
static inline int eval();
static inline int Exor();
static inline int Eand();
static inline int Eor();
static inline int Eor() {
int x = Eand();
while(c[i] == '|') {
i++;
x |= Eand();
}
return x;
}
static inline int Eand() {
int x = Exor();
while(c[i] == '&') {
i++;
x &= Exor();
}
return x;
}
static inline int Exor() {
int x = eval();
while(c[i] == '^') {
i++;
x ^= eval();
}
return x;
}
static inline int eval() {
int r;
if(c[i] == '(') {
i++;
r = Eor();
i++;
}
else if(c[i] == '1') {
i++;
return 1;
}
else if(c[i] == '0') {
i++;
return 0;
}
else return v[(int)c[i++]];
return r;
}
int main() {
fin.getline(s, 102);
for(i = 0; s[i] != 0; i++) {
if(s[i] == ' ') continue;
if(s[i] == '(' || s[i] == ')') {
c[k++] = s[i];
continue;
}
if(s[i] == 'T' && s[i + 1] == 'R') {
c[k++] = '1';
i += 3;
continue;
}
if(s[i] == 'F' && s[i + 1] == 'A') {
c[k++] = '0';
i += 4;
continue;
}
if(s[i] == 'O' && s[i + 1] == 'R') {
c[k++] = '|';
i++;
continue;
}
if(s[i] =='A' && s[i + 1] == 'N') {
c[k++] = '&';
i += 2;
continue;
}
if(s[i] == 'N' && s[i + 1] == 'O') {
c[k++] = '1';
c[k++] = '^';
i += 2;
continue;
}
c[k++] = s[i];
}
fin >> k;
while(k--) {
fin >> p;
v[(int)p] = 1 - v[(int)p];
i = 0;
fout << Eor();
}
return 0;
}