bool eval(){ bool ret; if(type>='A' && type<='Z') ret = v[type-'A']==1?true:false; else{ bool lv = l->eval(); bool rv = r->eval(); if(linv) lv = !lv; if(rinv) rv = !rv; if(type==')') ret = lv&&rv; else ret = lv||rv; } if(inv) ret = !ret; return ret; }
int main() { bool begin = true; while(gets(s)){ memset(pic,' ',sizeof pic); memset(vis,0,sizeof vis); int len = strlen(s); int ri,rj; for(int j=0;j<len;j++){ pic[1][1+j] = s[j]; if(s[j]=='?') ri = 1, rj=1+j; } //pic[0][len] = 0; int n=1; while(gets(s),s[0]!='*'){ ++n; len = strlen(s); for(int j=0;j<len;j++){ pic[n][1+j] = s[j]; if(s[j]=='?') ri = n, rj = 1+j; } //pic[n][len] = 0; } //bfs until a A, ) o > if(begin)begin=false; else printf("\n"); vis[ri][rj] = 1; Gate *root = build(ri,rj); while(gets(s),s[0]!='*'){ for(int i=0;i<26;i++) v[i] = s[i]-'0'; if(root->eval())printf("1\n"); else printf("0\n"); } } return 0; }