比赛 CSP2022普及组 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 逻辑表达式 最终得分 100
用户昵称 ANIG 运行时间 0.251 s
代码语言 C++ 内存使用 3.34 MiB
提交时间 2022-10-29 16:29:25
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
char s[1000005];
int lth,ok,res1,res2;
stack<int>sz,fh,has;
void ys(){
	int res=sz.top();
	sz.pop();
	if(fh.top()==1){
		res|=sz.top();
	}else if(fh.top()==2){
		res&=sz.top();
	}
	sz.pop();
	sz.push(res);
	if(has.top())ok=0; 
	fh.pop();has.pop();
}
signed main(){
	freopen("csp2022pj_expr.in","r",stdin);
	freopen("csp2022pj_expr.out","w",stdout);
	cin>>s;
	lth=strlen(s); 
	for(int i=0;i<lth;i++){
		if(s[i]=='('){
			fh.push(3);
		}else if(s[i]=='0'){
			sz.push(0);
		}else if(s[i]=='1'){
			sz.push(1);
		}else if(s[i]=='|'){
			while(fh.size()&&fh.top()!=3){
				ys();
			}
			fh.push(1);
			if(ok==0&&sz.top()==1){
				res2++,ok=1,has.push(1);
			}else has.push(0);
		}else if(s[i]=='&'){
			while(fh.size()&&fh.top()!=3&&fh.top()!=1){
				ys();
			}
			fh.push(2);
			if(ok==0&&sz.top()==0){
				res1++,ok=1,has.push(1);
			}else has.push(0);
		}else if(s[i]==')'){
			while(fh.size()&&fh.top()!=3){
				ys();
			}
			if(fh.size())fh.pop();
		}
	}
	while(fh.size()&&fh.top()!=3){
		ys();
	}
	cout<<sz.top()<<endl<<res1<<" "<<res2;
	return 0;
}