Pagini recente » Cod sursa (job #529734) | Cod sursa (job #2913935) | Cod sursa (job #2559379) | Cod sursa (job #3256900) | Cod sursa (job #777248)
Cod sursa(job #777248)
#include <cstdio>
#include <cstring>
#include<cctype>
#include <map>
using namespace std;
char sc[1005],sw[105], fin[1005],fp[1005],semn[1005];
int dim,dima,dimf,n,dimp,dims,dimr;
map<char,bool>mp;
bool rez[1005];
int ct_op(int i){
if(i+4<=dim&&sc[i]=='F'&&sc[i+1]=='A'&&sc[i+2]=='L'&&sc[i+3]=='S'&&sc[i+4]=='E') return 1;
if(i+3<=dim&&sc[i]=='T'&&sc[i+1]=='R'&&sc[i+2]=='U'&&sc[i+3]=='E')return 2;
if(i+2<=dim&&sc[i]=='A'&&sc[i+1]=='N'&&sc[i+2]=='D')return 3;
if(i+2<=dim&&sc[i]=='N'&&sc[i+1]=='O'&&sc[i+2]=='T')return 4;
if(i+1<=dim&&sc[i]=='O'&&sc[i+1]=='R')return 5;
return 0;
}
int pr(char cacat){
if(cacat=='!')return 2;
if(cacat=='&')return 1;
if(cacat=='|')return 0;
return 3;
}
void fpol(char out[1005],int &dimo){
int i;
for(i=1;i<=dimf;++i){
if(isalpha(fin[i])||fin[i]=='0'||fin[i]=='1')out[++dimo]=fin[i];
else if(fin[i]=='!'||fin[i]=='(')semn[++dims]=fin[i];
else if(pr(fin[i])<2&&pr(fin[i])>=0){
for(;dims&&semn[dims]!='('&&pr(semn[dims])>=pr(fin[i]);){
out[++dimo]=semn[dims];
--dims;
}
semn[++dims]=fin[i];
}
else if(fin[i]==')'){
for(;dims&&semn[dims]!='(';){
out[++dimo]=semn[dims];
--dims;
}
--dims;
}
}
for(;dims;--dims)out[++dimo]=semn[dims];
}
int ev(){
int i;
dimr=0;
for(i=1;i<=dimp;++i){
if(isalpha(fp[i])||fp[i]=='1'||fp[i]=='0')rez[++dimr]=mp[fp[i]];
else if(fp[i]=='!')rez[dimr]=!rez[dimr];
else if(fp[i]=='&')rez[dimr-1]=rez[dimr]&rez[dimr-1],--dimr;
else if(fp[i]=='|')rez[dimr-1]=rez[dimr]|rez[dimr-1],--dimr;
}
//fprintf(stderr,"%d",dimr);
return rez[dimr];
}
int main () {
int i;
char c=0;
mp['0']=0;
mp['1']=1;
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
for(;c!='\n';){
scanf("%c",&c);
sc[++dim]=c;
}
--dim;
scanf("%d\n",&n);
for(i=1;i<=n;++i)scanf("%c",&sw[i]);
for(i=1;i<=dim;++i){
if(ct_op(i)){
//fprintf(stderr,"aici");
if(ct_op(i)==1)fin[++dimf]='0',i+=4;
else if(ct_op(i)==2)fin[++dimf]='1',i+=3;
else if(ct_op(i)==3)fin[++dimf]='&',i+=2;
else if(ct_op(i)==4)fin[++dimf]='!',i+=2;
else if(ct_op(i)==5)fin[++dimf]='|',i+=1;
}
else{
if((!(isalpha(sc[i-1])))&&(!(isalpha(sc[i+1])))&&isalpha(sc[i]))fin[++dimf]=sc[i];
else if(sc[i]=='('||sc[i]==')')fin[++dimf]=sc[i];
}
}
//for(i=1;i<=dimf;++i)fprintf(stderr,"%c",fin[i]);
fpol(fp,dimp);
//for(i=1;i<=dimp;++i)fprintf(stderr,"%c",fp[i]);
for(i=1;i<=n;++i){
mp[sw[i]]=!mp[sw[i]];
printf("%d",ev());
}
return 0;
}