Pagini recente » Cod sursa (job #516776) | Cod sursa (job #878343) | Cod sursa (job #1043324) | Cod sursa (job #85029) | Cod sursa (job #2643607)
#include <bits/stdc++.h>
#define NMAX 1004
#define ll long long
using namespace std;
int n, lg;
bool val[NMAX];
char expr[NMAX],c;
vector<bool> values;
vector<pair<int, int>> sign;
int i;
void jump(int pos){
i += pos;
while (i < lg && expr[i] == ' ')
i++;
}
void reduct(int priority){
while (!sign.empty()){
if (sign.back().second > priority){
break;
}
else if (sign.back().first == 3){
values.back() = values.back() ^ 1;
sign.pop_back();
}
else if (sign.back().first == 2){
bool val = values.back();
values.pop_back();
values.back() = values.back() | val;
sign.pop_back();
}
else if (sign.back().first == 1){
bool val = values.back();
values.pop_back();
values.back() = values.back() & val;
sign.pop_back();
}
else{
break;
}
}
}
bool _is(string word){
if (i + word.size() - 1 >= lg) return false;
for (int j=0;j<word.size();j++){
if (expr[i + j] != word[j])
return false;
}
jump(word.size());
return true;
}
bool solve(){
values.clear();
sign.clear();
i = 0;
while (i < lg){
if (_is("AND")){
reduct(2);
sign.push_back({1, 2});
continue;
}
if (_is("OR")){
reduct(3);
sign.push_back({2, 3});
continue;
}
if (_is("NOT")){
reduct(1);
sign.push_back({3, 1});
continue;
}
if (expr[i] == '('){
sign.push_back({4, 5});
jump(1);
continue;
}
if (expr[i] == ')'){
reduct(4);
assert(!sign.empty() && sign.back().first == 4);
sign.pop_back();
jump(1);
continue;
}
if (_is("TRUE")){
values.push_back(1);
continue;
}
if (_is("FALSE")){
values.push_back(0);
continue;
}
bool crt = val[expr[i]];
jump(1);
values.push_back(crt);
}
reduct(4);
assert(values.size() == 1);
assert(sign.empty());
return values[0];
}
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
cin.getline(expr, 1006);
lg = strlen(expr);
cin >> n;
for (int i=1;i<=n;i++){
cin >> c;
val[c] ^= 1;
cout << (int)solve();
}
return 0;
}