求助
查看原帖
求助
351310
lsz_楼主2022/11/5 10:51
#include<bits/stdc++.h>
using namespace std;
struct san
{
	int v,x,y;
	san operator + (san a)
	{
		san b;
		b.v=a.v;
		b.x=a.x+x;
		b.y=a.y+y;
		return b;
	}
};
char c[1919810],hj[1919810];
int i,l;
stack<char> s;
stack<san> sp;
void n()
{
	hj[++l]=s.top();
	s.pop();
	return ;
}
int main()
{
	cin>>c;
	for(i=0;i<strlen(c);i++)
	{
		if(c[i]=='0'||c[i]=='1')
		{
			hj[++l]=c[i];
		}
		else if(c[i]=='(')
		{
			s.push('(');
		}
		else if(c[i]==')')
		{
			while(s.top()!='('&&s.size())
			{
				n();
			}
			s.pop();
		}
		else
		{
			if(c[i]=='&')
			{
				while(s.size()&&s.top()=='&')
				{
					n();
				}
			}
			else
			{
				while(s.size()&&(s.top()=='|'||s.top()=='&'))
				{
					n();
				}
			}
			s.push(c[i]);
		}
	}
	while(s.size())	n();
	for(i=1;i<=l;i++)
	{
		if(hj[i]=='0'||hj[i]=='1')
		{
			sp.push((san){hj[i]-'0',0,0});
		}
		else
		{
			san ri=sp.top();
			sp.pop();
			san le=sp.top();
			sp.pop();
			if(hj[i]=='&')
			{
				if(le.v==0)
				{
					le.x++;
					sp.push(le);
				}
				else
				{
					sp.push(le+ri);
				}
			}
			else
			{
				if(le.v==1)
				{
					le.y++;
					sp.push(le);
				}
				else
				{
					sp.push(le+ri);
				}
			}
		}
	}
	cout<<sp.top().v<<endl<<sp.top().x<<' '<<sp.top().y;
	return 0;
}

大佬帮帮蒟蒻吧

2022/11/5 10:51
加载中...