记录编号 577520 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [CSP 2022J]逻辑表达式 最终得分 100
用户昵称 Gravatar00000 是否通过 通过
代码语言 C++ 运行时间 0.352 s
提交时间 2022-11-07 23:06:33 内存使用 23.17 MiB
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s;
int stkn[2000000],n,p;
char stkp[2000000];
int cnt,val[2000000],op[2000000],ls[2000000],rs[2000000];
int ans[5];
void cop()
{
	char c=stkp[p--];
	int r=stkn[n--],l=stkn[n--];
	op[++cnt]=( c=='|' );//&=0  |=1   数字= -1 
	ls[cnt]=l;rs[cnt]=r;
	val[cnt]= (c=='|'? (val[l]|val[r]) : (val[l]&val[r]) );
	stkn[++n]=cnt;
}
void dfs(int x)
{
	if(op[x]==0)//&
	{
		if(!val[ls[x]]) ans[1]++,dfs(ls[x]);
		else dfs(ls[x]),dfs(rs[x]);
	}
	if(op[x]==1)//|
	{
		if(val[ls[x]]) ans[2]++,dfs(ls[x]);
		else dfs(ls[x]),dfs(rs[x]);
	}
}
int main(){
	freopen("csp2022pj_expr.in","r",stdin);
	freopen("csp2022pj_expr.out","w",stdout);
cin>>s;
s='('+s+')';
for(int q=0;q<s.length();q++)
{
	if(s[q]=='(') stkp[++p]=s[q];
	if(s[q]=='&')
	{
		while(stkp[p]=='&') cop();
		stkp[++p]=s[q];
	}
	if(s[q]=='|')
	{
		while(stkp[p]!='(') cop();
		stkp[++p]=s[q];
	}
	if(s[q]==')') 
	{
		while(stkp[p]!='(') cop();
		p--;
	}
	if(s[q]=='0'||s[q]=='1')
	{
		cnt++;
		val[cnt]=s[q]-'0';
		op[cnt]=-1;
		stkn[++n]=cnt;
	}
}
dfs(stkn[n]);
cout<<val[stkn[n]]<<endl;
cout<<ans[1]<<" "<<ans[2]<<endl;
return 0;
}