比赛 CSP2022普及组 评测结果 RRRRRRRRRRRRRRRRRRRR
题目名称 逻辑表达式 最终得分 0
用户昵称 康尚诚 运行时间 0.009 s
代码语言 C++ 内存使用 5.74 MiB
提交时间 2022-10-29 17:57:47
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
string zz;//原中缀表达式
stack<char> stk;
string str;
string zztohz(string zz)//中缀表达式转后缀表达式
{
	int len=zz.length();
	string ans="";
	for(int i=0;i<len;i++)
	{
//		cout<<zz[i];
		if(zz[i]=='0'||zz[i]=='1')
		{
			ans=ans+zz[i]+' ';
		}
		if(zz[i]=='|')
		{
			while(!stk.empty()&&stk.top()!='(')
			{
				ans=ans+stk.top()+' ';
				stk.pop();
			}
			stk.push('|');
		}
		if(zz[i]=='&')
		{
			if(!stk.empty()&&stk.top()=='|')
			{
				stk.push('&');
			}
			else
			{
				while(!stk.empty()&&stk.top()!='(')
				{
					ans=ans+stk.top()+' ';
					stk.pop();
				}
				stk.push('&');
			}
		}
		if(zz[i]=='(')
		{
			stk.push('(');
			ans=ans+"( ";
		}
		if(zz[i]==')')
		{
			while(!stk.empty()&&stk.top()!='(')
			{
				ans=ans+stk.top()+' ';
				stk.pop();
			}
			stk.pop();
			ans=ans+") ";
		}
	}
	while(!stk.empty())
	{
		ans=ans+stk.top()+' ';
		stk.pop();
	}
	return ans;
}
int dland=0,dlor=0;
stack<int> stk2;
bool dl=false;
int getans(string s)
{
	int len=s.length();
	for(int i=0;i<len;i++)
	{
		if(s[i]==' ')
		{
			continue;
		}
		if(!stk2.empty())
		{
			if(stk2.top()==1)
			{
				if(str[i/2+1]=='|'&&!dl)
				{
					cout<<i<<"or"<<endl;
					dlor++;
					if(s[i+2]=='(')
					{
						dl=true;
					}
				}
			}
			if(stk2.top()==0)
			{
				if(str[i/2+1]=='&'&&!dl)
				{
					cout<<i<<"and"<<endl;
					dland++;
					if(s[i+1]=='(')
					{
						dl=true;
					}
				}
			}
		}
		if(s[i]==')')
		{
			dl=false;
		}
		if(s[i]=='1'||s[i]=='0')
		{
			stk2.push(s[i]-'0');
		}
		if(s[i]=='|')
		{
			int a=stk2.top();stk2.pop();
			int b=stk2.top();stk2.pop();
			stk2.push(a|b);
		}
		if(s[i]=='&')
		{
			int a=stk2.top();stk2.pop();
			int b=stk2.top();stk2.pop();
			stk2.push(a&b);
		}
	}
	return stk2.top();
}
int main()
{
	cin>>str;
	for(int i=0;i<str.length();i++)
	{
		cout<<str[i]<<" ";
	}
	cout<<endl<<zztohz(str)<<endl;
	cout<<getans(zztohz(str))<<endl<<dland<<" "<<dlor;
}