Pagini recente » Cod sursa (job #1432664) | Cod sursa (job #1272087) | Cod sursa (job #1748800) | Cod sursa (job #3276589) | Cod sursa (job #1505446)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("bool.in");
ofstream fout("bool.out");
string s;
bitset < 150 > val;
stack < char > operatie;
stack < bool > valuare;
inline int rangseg(char x){
if(x == '&')
return 1;
if(x == '|')
return 1;
if(x == '!')
return 2;
return 0;
}
inline void calcul()
{
char x = operatie.top(); operatie.pop();
if(x == '!' ) {
// fout << valuare.top() << " ";
valuare.top() = !valuare.top();
}
else{
bool a = valuare.top(); valuare.pop();
bool b = valuare.top(); valuare.pop();
if(x == '&')
valuare.push(a & b);
if(x == '|')
valuare.push(a | b);
}
}
inline int evalexp()
{
for(int i = 0 ; i < s.size(); i ++){
if(s[i] == '('){
operatie.push('(');
} else {
if(s[i] == ')'){
while(operatie.top() != '(')
calcul();
operatie.pop();
} else {
int r = rangseg(s[i]);
if(r!= 0){
while(rangseg(operatie.top()) >= r && rangseg(operatie.top()) != 2)
calcul();
operatie.push(s[i]);
} else {
if((s[i] >= 'A' && s[i] <= 'Z') || (s[i] == 't' || s[i] == 'f')){
valuare.push(val[s[i]]);
while(rangseg(operatie.top()) == 2 )
calcul();
}
}
}
}
}
while(operatie.size() > 1)
calcul();
return valuare.top();
}
int main()
{
int n;
char x;
operatie.push('#');
getline(fin ,s);
for(int i = 0; i < s.size(); i++){
if(s[i] == 'A' && s[i+1] == 'N')
s[i] = '&',s.erase(s.begin() + i + 1,s.begin() + i + 3);
if(s[i] == 'N' && s[i+1] == 'O')
s[i] = '!',s.erase(s.begin() + i + 1,s.begin() + i + 3);
if(s[i] == 'O' && s[i+1] == 'R')
s[i] ='|',s.erase(s.begin() + i + 1);
if(s[i] == 'T' && s[i+1] == 'R')
s[i] = 't',s.erase(s.begin() + i + 1,s.begin() + i + 4);
if(s[i] == 'F' && s[i+1] == 'A')
s[i] = 'f',s.erase(s.begin() + i + 1,s.begin() + i + 5);
}
val['t'] = 1;
fin >> n ;
for(int i = 1; i <= n; i++){
fin >> x;
val[x] = !val[x];
while(!valuare.empty())
valuare.pop();
fout << evalexp();
}
return 0;
}