比赛 CSP2022普及组 评测结果 AAAWWWAWWWWWWWAAAWWW
题目名称 逻辑表达式 最终得分 35
用户昵称 崔宸铭 运行时间 0.339 s
代码语言 C++ 内存使用 3.14 MiB
提交时间 2022-10-29 17:56:24
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
string str;
int len;
int x,y;
stack<int> num;
stack<char> op;
int f(){
	int a=num.top();
	num.pop();
	int b=num.top();
	num.pop();
	char p=op.top();
	op.pop();
	if(b==1&&p=='|') y++;
	if(b==0&&p=='&') x++;
	if(p=='|'){
		return a|b;
	}else{
		return a&b;
	}
}
int main(){
	freopen("csp2022pj_expr.in","r",stdin);
	freopen("csp2022pj_expr.out","w",stdout);
	cin>>str;
	len=str.length();
	for(int i=0;i<len;i++){
		if(str[i]=='(') op.push('(');
		else if(str[i]=='0') num.push(0);
		else if(str[i]=='1') num.push(1);
		else if(str[i]=='|'){
			if(!op.empty()&&op.top()!='('){
				int x=f();
				num.push(x);
			}
			op.push('|');
		}else if(str[i]=='&'){
			if(!op.empty()&&op.top()=='&'){
				int x=f();
				num.push(x);
			}
			op.push('&');
		}else{
			while(op.top()!='('){
				int x=f();
				num.push(x);
			}
			op.pop();
		}
	}
	while(!op.empty()){
		int x=f();
		num.push(x);
	}
	cout<<num.top()<<endl;
	cout<<x<<" "<<y;
	return 0;
}