90pts求调
查看原帖
90pts求调
1268701
zhangzheng2026楼主2024/7/21 14:27

玄学代码,WA on # 6,14

#include <bits/stdc++.h>
using namespace std;
string s;
int n,a[1000005],b[100005],l,x,m,stk[100005],top,prt[100005],bj[100005],v[1000005];
int f(int y)
{
	if(!prt[y]) return y;
	return f(prt[y]);
}
int main()
{
	while(1)
	{
		cin>>s;
		int k=s.length();
		if(s[0]>='0'&&s[0]<='9')
		{
			for(int i=0;i<k;i++) n=n*10+s[i]-'0';
			break;
		}
		if(s[0]=='x')
		{
			l++;
			for(int i=1;i<k;i++) a[l]=a[l]*10+s[i]-'0';
		}
		else if(s[0]=='!') a[++l]=-1;
		else if(s[0]=='|') a[++l]=-2;
		else a[++l]=-3;
	}
	for(int i=1;i<=n;i++) cin>>b[i];
	for(int i=1;i<=l;i++)
	{
		if(a[i]>0) stk[++top]=a[i],v[top]=b[a[i]];
		else if(a[i]==-1) v[top]^=1;
		else if(a[i]==-2)
		{
			if(v[top]&&v[top-1]) bj[stk[top]]=bj[stk[top-1]]=1;
			else if(v[top]) bj[stk[top-1]]=1,v[top-1]=1,stk[top-1]=stk[top];
			else if(v[top-1]) bj[stk[top]]=1;
			else prt[stk[top]]=stk[top-1];
			top--;
		}
		else if(a[i]==-3)
		{
			if(!v[top]&&!v[top-1]) bj[stk[top]]=bj[stk[top-1]]=1;
			else if(!v[top]) bj[stk[top-1]]=1,v[top-1]=0,stk[top-1]=stk[top];
			else if(!v[top-1]) bj[stk[top]]=1;
			else prt[stk[top]]=stk[top-1];
			top--;
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		int q=1;
		cin>>x;
		while(prt[x])
		{
			if(bj[x]) {cout<<v[1]<<'\n';q=0;break;}
			x=prt[x];
		}
		if(q) cout<<(v[1]^bj[x]^1)<<'\n';
	}
	return 0;
}
2024/7/21 14:27
加载中...