Pagini recente » Cod sursa (job #683509) | Cod sursa (job #2165412) | Cod sursa (job #2968416) | Cod sursa (job #1447141) | Cod sursa (job #2736181)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("bool.in");
ofstream fout("bool.out");
const int lMax = 1e3 + 5;
int i1;
char ex0[lMax];
bool v[30];
string ex1;
bool eval();
bool termen();
bool factor();
bool eval(){
bool ans = termen();
while(ex1[i1] == '|'){
i1++;
ans = ans || termen();
}
return ans;
}
bool termen(){
bool ans = factor();
while(ex1[i1] == '&'){
i1++;
ans = ans & factor();
}
return ans;
}
bool factor(){
bool ans;
if(ex1[i1] == '('){
i1++;
ans = eval();
i1++;
} else if(ex1[i1] == '!') {
i1++;
ans = !eval();
} else if(ex1[i1] >= 'A' && ex1[i1] <= 'Z'){
ans = v[ex1[i1] - 'A'];
i1++;
} else {
ans = ex1[i1] - '0';
i1++;
}
return ans;
}
void solve(){
int n;
fin >> n;
while(n--){
char var;
fin >> var;
v[var - 'A'] = !v[var - 'A'];
i1 = 0;
fout << eval();
}
}
bool alpha(char c){
return (c >= 'A' && c <= 'Z');
}
void proc(){
int i0 = 0, j0 = strlen(ex0);
ex1 = "";
while(i0 < j0){
if(alpha(ex0[i0])){
if(alpha(ex0[i0 + 1])){
if(ex0[i0] == 'A'){
ex1 += "&";
i0 += 3;
} else if(ex0[i0] == 'N'){
ex1 += "!";
i0 += 3;
} else if(ex0[i0] == 'O'){
ex1 += "|";
i0 += 2;
} else if(ex0[i0] == 'T'){
ex1 += "1";
i0 += 4;
} else if(ex0[i0] == 'F'){
ex1 += "0";
i0 += 5;
}
} else
ex1 += ex0[i0++];
} else if(ex0[i0] == '(' || ex0[i0] == ')')
ex1 += ex0[i0++];
else
i0++;
}
}
int main()
{
fin.getline(ex0, lMax);
proc();
solve();
return 0;
}