比赛 CSP2022普及组 评测结果 WWWWEEWEEEEEEEWWWEEE
题目名称 逻辑表达式 最终得分 0
用户昵称 hnzzlza 运行时间 2.585 s
代码语言 C++ 内存使用 10.31 MiB
提交时间 2022-10-29 17:58:38
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
string s;int hz[1000005],tp;
int str[1000005],top,_a,_o,yxj[128];
void instr(char c){
    if(c=='0'||c=='1'){hz[tp++]=c-'0';return;}
    else {
        tp-=2;
        if(c=='&'){
            if(hz[tp]==0){_a++;hz[tp]=0;}
            else hz[tp]=(hz[tp])&(hz[tp+1]);
        }
        if(c=='|'){
            if(hz[tp]==1){_o++;hz[tp]=1;}
            else hz[tp]=(hz[tp])|(hz[tp+1]);
        }
    }
}
void zzh(){
    for(int i=0;i<s.size();++i){
        if(s[i]=='1'||s[i]=='0')instr(s[i]);
        else if(s[i]=='(')str[top++]=s[i];
        else if(s[i]=='&'||s[i]=='|'){
            if(yxj[str[top]]<yxj[s[i]])str[top++]=s[i];
            else {
                while(yxj[str[top]]>=yxj[s[i]])instr(char(str[--top]));
                str[top++]=s[i];
            }
        }
        else if(s[i]==')'){
            while(char(str[top-1])!='('){
                instr(char(str[--top]));
            }
            top--;
        }
    }
    while(top>0)instr(char(str[--top]));
}
int main(){
    freopen("csp2022pj_expr.in","r",stdin);
    freopen("csp2022pj_expr.out","w",stdout);
    yxj['(']=1;yxj['|']=2;yxj['&']=3;
    cin>>s;
    zzh();
    cout<<hz[1]<<endl<<_a<<' '<<_o;
    return 0;
}