75求调
查看原帖
75求调
795779
Huxuanjie0517楼主2024/7/30 22:24
#include<bits/stdc++.h>
using namespace std;
char c[1000010];
int arr[1000010];
int bj[1000010];
struct node{
	bool bl;
	int id;
};
stack <node> s;
int n,m,l;
void qwq(){
	freopen("P7073_1.in","r",stdin);
	fgets(c+1,1000010,stdin);
	l=strlen(c+1);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>arr[i];
	for(int i=1;i<=l;i++){
		if(c[i]=='x'){
			int x;
			sscanf(c+i+1,"%d",&x);
			bool ccf=arr[x];
			s.push({ccf,x});
		}else if(c[i]=='!'){
			node qqq=s.top();
			s.pop();
			s.push({!qqq.bl,i});
			bj[qqq.id]=i;
		}else if(c[i]=='&'){
			node a=s.top(); s.pop();
			node b=s.top(); s.pop();
			s.push({a.bl&&b.bl,i});
			if(a.bl) bj[b.id]=i;
			if(b.bl) bj[a.id]=i;
		}else if(c[i]=='|'){
			node a=s.top(); s.pop();
			node b=s.top(); s.pop();
			s.push({a.bl||b.bl,i});
			if(!a.bl) bj[b.id]=i;
			if(!b.bl) bj[a.id]=i;
		}
	}	
}
int main(){
	qwq();
	cin>>m;
	bool ans=s.top().bl;
	for(int i=1;i<=m;i++){
		int x,y;
		cin>>x;
		for(y=x;bj[y];y=bj[y]);
		cout<<i<<" "<<x<<" ";
		if(y==l-1) cout<<!ans<<endl;
		else cout<<ans<<endl;
	}
	return 0;
}
2024/7/30 22:24
加载中...