Pagini recente » Cod sursa (job #1144361) | Cod sursa (job #2178195) | Cod sursa (job #1129123) | Cod sursa (job #2217313) | Cod sursa (job #2144917)
#include <bits/stdc++.h>
using namespace std;
ifstream in("bool.in");
ofstream out("bool.out");
#define ll long long
string s="";
string s1="";
int n1=0, n2=0,cp=0;
bool v[1001];
char o[1001];
bool add(char op, bool a, bool b){
switch(op){
case '&': return (a&b);
case '|': return (a|b);
}
}
bool exp(){
int i;
for(i=0; i<s.length(); ++i){
if(s[i]=='(')
o[++n2]=s[i];
else if(s[i]==')'){
while(o[n2]!='('){
--n2, --n1;
v[n1]=add(o[n2+1],v[n1],v[n1+1]);
}
--n2;
}
else if(s[i]=='1'){
if(s[i-1]=='!')
v[++n1]=0;
else
v[++n1]=1;
}
else if(s[i]=='0'){
if(s[i-1]=='!')
v[++n1]=1;
else
v[++n1]=0;
}
else if(s[i]=='&'){//cout<<"a";
while(o[n2]!='(' && n2>0 && o[n2]!='|'){
--n2, --n1;
v[n1]=add(o[n2+1],v[n1],v[n1+1]);
}
o[++n2]='&';
}
else if(s[i]=='|'){
while(o[n2]!='(' && n2>0){
--n2, --n1;
v[n1]=add(o[n2+1],v[n1],v[n1+1]);
}
o[++n2]='|';
}
}
while(n2>0){
--n2, --n1;
v[n1]=add(o[n2+1],v[n1],v[n1+1]);
}
return v[1];
}
int main(){
int i;
getline(in,s1);
while(s1.find("TRUE")!=string::npos)
s1.replace(s1.find("TRUE"),4,"1");
while(s1.find("FALSE")!=string::npos)
s1.replace(s1.find("FALSE"),5,"0");
while(s1.find("AND")!=string::npos)
s1.replace(s1.find("AND"),3,"&");
while(s1.find("OR")!=string::npos)
s1.replace(s1.find("OR"),2,"|");
while(s1.find("NOT")!=string::npos)
s1.replace(s1.find("NOT"),3,"!");
while(s1.find(" ")!=string::npos)
s1.replace(s1.find(" "),1,"");
int n;
s=s1;
for(i=0; i<s.length(); ++i)
if(s1[i]>='A' && s1[i]<='Z')
s[i]='0';
char c;
in>>n;
while(n--){
n1=0, n2=0;
in>>c;
for(i=0; i<s.length(); ++i)
if(s1[i]==c)
s[i]=char(!(int(s[i])-48)+48);
out<<exp();
}
}