布尔表达式

#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;
}

 

posted @ 2016-10-18 11:15  GFY  阅读(292)  评论(0编辑  收藏  举报