Pagini recente » Cod sursa (job #1930203) | Cod sursa (job #2382566) | Cod sursa (job #1098190) | Cod sursa (job #176658) | Cod sursa (job #2147792)
#include<cstdio>
#include<cstring>
using namespace std;
char ch[1005],op[1005],sol[1005],sol2[1005];
int sta[1005];
int prec[150];
int var[30];
int main(){
freopen("bool.in","r",stdin);
freopen("bool.out","w",stdout);
int n,u=0,i;
fgets(ch+1,1002,stdin);
n=strlen(ch+1);
n--;
for(i=1;i<=n;i++)
if (ch[i]!=' ')
ch[++u]=ch[i];
n=u;
u=0;
prec[124]=1;
prec[38]=2;
prec[33]=3;
for(i=1;i<=n;i++){
if (ch[i]=='T' && ch[i+1]=='R' && i+1<=n)
ch[++u]='1',i+=3;
else
if (ch[i]=='F' && ch[i+1]=='A' && i+1<=n)
ch[++u]='0',i+=4;
else
if (ch[i]=='A' && ch[i+1]=='N' && i+1<=n)
ch[++u]='&',i+=2;
else
if (ch[i]=='O' && ch[i+1]=='R' && i+1<=n)
ch[++u]='|',i++;
else
if (ch[i]=='N' && ch[i+1]=='O' && i+1<=n)
ch[++u]='!',i+=2;
else
ch[++u]=ch[i];}
n=u;
u=0;
int u2=0;
for(i=1;i<=n;i++){
if (ch[i]>='A' && ch[i]<='Z'){
sol[++u]=ch[i];
continue;}
if (ch[i]=='0' || ch[i]=='1'){
sol[++u]=ch[i];
continue;}
if (ch[i]=='('){
op[++u2]=ch[i];
continue;}
if (ch[i]=='!' || ch[i]=='&' || ch[i]=='|'){
while(u2 && op[u2]!='(' && prec[ch[i]]<=prec[op[u2]])
sol[++u]=op[u2],u2--;
op[++u2]=ch[i];
continue;}
if (ch[i]==')'){
while(u2 && op[u2]!='(')
sol[++u]=op[u2],u2--;
u2--;}}
while(u2)
sol[++u]=op[u2],u2--;
int t,i1;
char c;
scanf("%d\n",&t);
for(i1=1;i1<=t;i1++){
scanf("%c",&c);
var[c-64]=1-var[c-64];
for(i=1;i<=u;i++)
sol2[i]=sol[i];
for(i=1;i<=u;i++)
if (sol2[i]>='A' && sol2[i]<='Z')
sol2[i]=var[sol2[i]-64]+48;
int st=0;
for(i=1;i<=u;i++){
if (sol2[i]=='0' || sol2[i]=='1')
sta[++st]=sol2[i]-48;
if (sol2[i]=='!')
sta[st]=1-sta[st];
if (sol2[i]=='&')
sta[st-1]=sta[st]&sta[st-1],st--;
if (sol2[i]=='|')
sta[st-1]=sta[st]|sta[st-1],st--;}
printf("%d",sta[1]);}
return 0;}