90pts求助
  • 板块P1575 正误问题
  • 楼主Graph
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/1/15 16:59
  • 上次更新2024/1/15 17:36:42
查看原帖
90pts求助
616996
Graph楼主2024/1/15 16:59

rt,Link。

代码:

%:include<bits/stdc++.h>
using namespace std;
%:define int long long

string s;
int n,a[260];
stack<int>stk;
vector<int>num;

signed main()
{
	while(cin>>s)
	{
		if(s=="true")
			a[++n]=1;
		else if(s=="false")
			a[++n]=0;
		else if(s=="or")
			a[++n]=-2;
		else if(s=="and")
			a[++n]=-3;
		else if(s=="not")
			a[++n]=-1;
		else
		{
			puts("error");
			return 0;
		}
		if(n!=1&&((a[n-1]>=0&&a[n]>=0)||(a[n-1]<(-1)&&a[n]<(-1))))
		{
			puts("error");
			return 0;
		}
		if(n!=1&&a[n-1]==-1&&a[n]<(-1))
		{
			puts("error");
			return 0;
		}
		if(n==1&&a[1]<(-1))
		{
			puts("error");
			return 0;
		}
	}
	if(a[n]<=-1)
	{
		puts("error");
		return 0;
	}
	for(int i=1;i<=n;i++)
	{
		if(a[i]>=0)
		{
			while(stk.empty()==false&&stk.top()==-1)
			{
				a[i]=1-a[i];
				stk.pop();
			}
			num.push_back(a[i]);
		}
		else if(a[i]==(-1))
			stk.push(a[i]);
		else if(a[i]==(-3))
		{
			while(stk.empty()==false&&stk.top()==-3)
			{
				num.push_back(-3);
				stk.pop();
			}
			stk.push(-3);
		}
		else
		{
			while(stk.empty()==false&&stk.top()<=(-2))
			{
				num.push_back(stk.top());
				stk.pop();
			}
			stk.push(-2);
		}
	}
	while(stk.empty()==false)
	{
		num.push_back(stk.top());
		stk.pop();
	}
	for(int i=0;i<num.size();i++)
	{
		if(num[i]>=0)
			stk.push(num[i]);
		else if(num[i]==-2)
		{
			int x=stk.top();
			stk.pop();
			int y=stk.top();
			stk.pop();
			stk.push(x|y);
		}
		else
		{
			int x=stk.top();
			stk.pop();
			int y=stk.top();
			stk.pop();
			stk.push(x&y);
		}
	}
	if(stk.top()==1)
		puts("true");
	else
		puts("false");
	return 0;
}
2024/1/15 16:59
加载中...