RT,有人知道#13的测试点是什么吗?hack数据都可以过
#include <iostream>
using namespace std;
int n=1,bb,nn;
struct node{
string name;
int before;
int now;
int after;
};
node a[300];
bool check(string t){
if(t=="false" || t=="true"){
return 1;
}
return 0;
}
int main(){
a[0].after=1;
while(cin>>a[n].name){
a[n].now=n;
a[n].before=n-1;
a[n].after=n+1;
n++;
}
for(int i=1;i<=n;i++){
if(a[i].name=="not" && a[i-1].name=="not"){
a[i].name="nnot";
a[i].before=a[i-1].before;
a[a[i-1].before].after=a[i-1].after;
}
else if(a[i].name=="not" && a[i-1].name=="nnot"){
a[i].name="not";
a[i].before=a[i-1].before;
a[a[i-1].before].after=a[i-1].after;
}
}
for(int i=a[0].after;i<=n;i++){
if(a[i].name=="not"){
if(a[a[i].after].name=="true"){
a[a[i].after].name="false";
}
else if(a[a[i].after].name=="false"){
a[a[i].after].name="true";
}
else{
cout<<"error"<<endl;
return 0;
}
a[a[i].before].after=a[i].after;
a[a[i].after].before=a[i].before;
}
else if(a[i].name=="nnot"){
if(!((a[a[i].after].name=="false")&&(a[a[i].after].name=="true"))){
cout<<"error"<<endl;
return 0;
}
a[a[i].before].after=a[i].after;
a[a[i].after].before=a[i].before;
}
}
for(int i=a[0].after;i<=n;i++){
if(a[i].name=="and"){
if(a[a[i].before].name=="true" && a[a[i].after].name=="true"){
a[i].name="true";
bb=a[a[i].before].before;
nn=a[a[i].after].after;
a[bb].after=i;
a[nn].before=i;
a[i].before=bb;
a[i].after=nn;
}
else if(check(a[a[i].before].name) && check(a[a[i].after].name)){
a[i].name="false";
bb=a[a[i].before].before;
nn=a[a[i].after].after;
a[bb].after=i;
a[nn].before=i;
a[i].before=bb;
a[i].after=nn;
}
else{
cout<<"error"<<endl;
return 0;
}
}
}
for(int i=a[0].after;i<=n;i++){
if(a[i].name=="or"){
if(a[a[i].before].name=="true" || a[a[i].after].name=="true"){
a[i].name="true";
bb=a[a[i].before].before;
nn=a[a[i].after].after;
a[bb].after=i;
a[nn].before=i;
a[i].before=bb;
a[i].after=nn;
}
else if(check(a[a[i].before].name) && check(a[a[i].after].name)){
a[i].name="false";
bb=a[a[i].before].before;
nn=a[a[i].after].after;
a[bb].after=i;
a[nn].before=i;
a[i].before=bb;
a[i].after=nn;
}
else{
cout<<"error"<<endl;
return 0;
}
}
}
if(a[a[a[0].after].after].name!=""){
cout<<"error"<<endl;
return 0;
}
else if(!check(a[a[0].after].name)){
cout<<"error"<<endl;
return 0;
}
cout<<a[a[0].after].name<<endl;
return 0;
}