布尔表达式
#include <algorithm> #include <cstdio> int a[1000005],b[1000005],i,n=0,m=0,x,bo=0; char s[7]={'F','V',')','|','&','!','('},c; void work(int x) { for (;n && m && b[m]>=x;b[m--]=0) { if (b[m]==6) { if (x==2) b[m--]=0; break; } if (b[m]==3) a[n-1]|=a[n]; else if (b[m]==4) a[n-1]&=a[n]; else a[n]=!a[n]; if (b[m]<=4) a[n--]=0; } if (x>2) b[++m]=x; } int main() { for (;scanf("%c",&c)!=EOF;) { if (c==' ') continue; x=-1; for (i=0;i<7;++i) if (s[i]==c) {x=i;break;} if (x==-1) continue; if (x<2) a[++n]=x; else if (x==5) bo^=1; else { if (bo) work(5); bo=0;work(x); } } work(1); if (a[1]) printf("V\n");else printf("F\n"); return 0; }