全部RE求调
查看原帖
全部RE求调
477821
toolong114514楼主2023/9/22 21:03
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int trans(char ch){
	if(ch=='&') return 1;
	else if(ch=='|') return 2;
	else if(ch=='!') return 3;
	else return 0;
}
int trans_n(string ch){
	int x=0;
	for(int i=1;i<ch.length();i++){
		x*=10;
		x+=ch[i]-'0';
	}
	return x;
}
struct node{
	int lson,rson;
}tree[114514];
int numtrans[114514];
bool numlis[114514];
bool ans[114514];
int opr[114514];
stack<int> stk;
int n,q,k;
string s;
void cal(int pos){
	if(opr[pos]==0){
		ans[pos]=numlis[numtrans[pos]];
		return;
	}
	if(opr[pos]!=3)cal(tree[pos].lson);
	cal(tree[pos].rson);
	if(opr[pos]==1){
		ans[pos]=ans[tree[pos].lson]&&ans[tree[pos].rson];
	}else{
		ans[pos]=ans[tree[pos].lson]||ans[tree[pos].rson];
	}
}
bool vst[114514];
void change_rec(int pos){
	if(opr[pos]==0){
		vst[pos]=true;
		return;
	}else if(opr[pos]==1){
		change_rec(tree[pos].lson);
		if(ans[tree[pos].lson]!=0) change_rec(tree[pos].rson);
	}else if(opr[pos]==2){
		change_rec(tree[pos].lson);
		if(ans[tree[pos].lson]!=1) change_rec(tree[pos].rson);
	}else{
		change_rec(tree[pos].rson);
	}
}
int main(){
	while(cin>>s){
		if(s[0]!='x'&&s[0]!='!'){
			int a=stk.top();
			stk.pop();
			int b=stk.top();
			stk.pop();
			k++;
			tree[k]={b,a};
			stk.push(k);
		}else if(s[0]!='x'&&s[0]=='!'){
			int a=stk.top();
			stk.pop();
			k++;
			tree[k].rson=a;
			stk.push(k);
		}else{
			stk.push(trans_n(s));
			n++;
			k++;
			numtrans[k]=n;
		}
		opr[k]=trans(s[0]);
	}
	int root=stk.top();
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>numlis[i];
	}
	cal(root);
	cin>>q;
	while(q--){
		int t;
		cin>>t;
		if(vst[t]==true) cout<<!ans[root]<<endl;
		else cout<<ans[root]<<endl;
	}
	return 0;
}
2023/9/22 21:03
加载中...