求救!!哪里错了??
查看原帖
求救!!哪里错了??
322285
北京楼主2021/5/23 01:18

大晚上的调了好久没找出错,求助大佬 Orz

//P7073 [CSP-J2020] 表达式
#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>
using namespace std;
struct node
{
	bool v;//value 
	int bh;//编号 
}a[100000+10];
stack<node>st;
string s;
int son[1000000+10][3],sbh[100000+10],tot;
//sbh:swap bh(编号),转换编号 
bool deci[1000000+10],decide[100000+10],ans;
int main()
{
	getline(cin,s);
	int len=s.size();
	int n;
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
		scanf("%d",&a[i].v);
	
	for(int i=0;i<len;++i)
	{
		if(s[i]=='x')
		{
			++i;
			int ss=0;
			while(s[i]>='0'&&s[i]<='9')ss=ss*10+s[i]-'0',++i;
			a[ss].bh=++tot;
			sbh[tot]=ss;
			st.push(a[ss]);
		}
		else if(s[i]=='&')
		{
			node u1=st.top();st.pop();
			node u2=st.top();st.pop();
			node u3;
			u3.v=u1.v&&u2.v,u3.bh=++tot;
			st.push(u3);
			son[tot][1]=u2.bh,son[tot][2]=u1.bh;
			//cout<<son[i][1]<<endl<<son[i][2]<<endl;
			if(u1.v==1)deci[u2.bh]=1;
			if(u2.v==1)deci[u1.bh]=1;
		}
		else if(s[i]=='|')
		{
			node u1=st.top();st.pop();
			node u2=st.top();st.pop();
			node u3;
			u3.v=u1.v||u2.v,u3.bh=++tot;
			st.push(u3);
			son[tot][1]=u2.bh,son[tot][2]=u1.bh;
			//cout<<son[i][1]<<endl<<son[i][2]<<endl;
			if(u1.v==0)deci[u2.bh]=1;
			if(u2.v==0)deci[u1.bh]=1;
		}
		else if(s[i]=='!')
		{
			node u=st.top();st.pop();
			u.v=!u.v;
			st.push(u);
		}
	}
	
	ans=st.top().v;st.pop();
	int root=tot;
	while(son[root][1]!=0)
	{
		if(deci[son[root][1]])
		{
			if(son[son[root][1]][1]==0)
				decide[sbh[son[root][1]]]=1;
			root=son[root][1];
		}
		else if(deci[son[root][2]])
		{
			if(son[son[root][2]][1]==0)
				decide[sbh[son[root][2]]]=1;
			root=son[root][2];
		}
	}
	
	int q;
	scanf("%d",&q);
	for(int i=1;i<=q;++i)
	{
		//cout<<"111111111"<<endl;
		int ques;
		scanf("%d",&ques);
		if(decide[ques])putchar(!ans+'0');
		else putchar(ans+'0');
		putchar('\n');
	}
	return 0;
}

感谢大佬指教!

2021/5/23 01:18
加载中...