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;
}