比赛 CSP2022普及组 评测结果 EEEEEEEEEEEEEEEEEEEE
题目名称 逻辑表达式 最终得分 0
用户昵称 荒之梦殇 运行时间 3.804 s
代码语言 C++ 内存使用 6.09 MiB
提交时间 2022-10-29 16:20:50
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long tmp1,tmp2;//&=tmp1,|=tmp2;
string s;
char arr[100005],num=0;
stack<long> st1;
int val(char c){
	if(c=='|') return 1;
	else if(c=='&') return 2;
	else if(c=='(') return 0;
}
int zhuan(string s){
	stack<char> st;
    for(int i=0;i<s.size();i++){
    	char n=s[i];
    	if(n=='1'||n=='0'){
    		arr[num]=n;
    		num++;
		}
		else if(st.empty()){
			st.push(n);
		}
		else if(n=='('){
			st.push(n);
		}
		else if(n==')'){
			while(st.top()!='('){
				char c=st.top();
				arr[num]=c;
    			num++;
				st.pop();
			}
			st.pop();
		}
		else{
			while(!st.empty()&&val(n)<=val(st.top())){
				char c=st.top();
				arr[num]=c;
    			num++;
				st.pop();
			}
			st.push(n);
		}
	}
	while(!st.empty()){
		char c=st.top();
		arr[num]=c;
    	num++;
		st.pop();
	}
}
int main(){
	freopen("csp2022pj_expr.in", "r", stdin);
	freopen("csp2022pj_expr.out", "w", stdout);
	cin>>s;
	zhuan(s);
	for(int i=0;i<num;i++){
		char c=arr[i];
		if(c=='0'||c=='1'){
			st1.push(c-48);
		}else{
			if(c=='|'){
				long long x=st1.top();st1.pop();
				long long y=st1.top();st1.pop();
				if(y==1) tmp1++;
				if(x==1||y==1){
					st1.push(1);
				}
				if(x==0&&y==0){
					st1.push(0);
				}
			}
			if(c=='&'){
				long long x=st1.top();st1.pop();
				long long y=st1.top();st1.pop();
				if(x==1) tmp2++; 
				if(x==0||y==0){
					st1.push(0);
				}
				if(x==1&&y==1){
					st1.push(1);
				}
			}
		}
	}
	cout<<st1.top()<<" "<<tmp1<<" "<<tmp2<<" ";
	return 0;
}