关于输出
  • 板块灌水区
  • 楼主_0o0_
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/21 16:27
  • 上次更新2024/10/21 19:19:04
查看原帖
关于输出
671610
_0o0_楼主2024/10/21 16:27

为啥我这么写,后两项不会正常输出,只会输出0

int main()
{
	scanf("%s",str+1);
	change();
	build();
	printf("%d\n%d %d",dfs(cnt),ans_1,ans_2);
	return 0;
}

但是这么写就正常输出了

int main()
{
	scanf("%s",str+1);
	change();
	build();
	printf("%d\n",dfs(cnt));
	printf("%d %d",ans_1,ans_2);
	return 0;
}

input:

0&(1|0)|(1|1|1&0)

out:

1
1 2

完整程序

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+7;
int ans_1,ans_2;
char str[N];
vector<char>ope;
vector<char>suf;
struct node
{
	int v,l,r;
}tree[N];
int cnt;
vector<int>sta;
void change()
{
	int n=strlen(str+1);
	for(int i=1;i<=n;i++)
	{
		if(str[i]=='|')
		{
			while(!ope.empty()&&ope.back()!='(')
			{
				suf.push_back(ope.back());
				ope.pop_back();
			}
			ope.push_back(str[i]);
		}
		else if(str[i]=='&')
		{
			while(!ope.empty()&&ope.back()=='&')
			{
				suf.push_back(ope.back());
				ope.pop_back();
			}
			ope.push_back(str[i]);
		}
		else if(str[i]=='(')
		{
			ope.push_back(str[i]);
		}
		else if(str[i]==')')
		{
			while(ope.back()!='(')
			{
				suf.push_back(ope.back());
				ope.pop_back();
			}
			ope.pop_back();
		}
		else
		{
			suf.push_back(str[i]);
		}
	}
	while(!ope.empty())
	{
		suf.push_back(ope.back());
		ope.pop_back();
	}
}
void build()
{
	for(int i=0;i<suf.size();i++)
	{
		if(suf[i]=='|')
		{
			int r=sta.back();
			sta.pop_back();
			int l=sta.back();
			sta.pop_back();
			tree[++cnt]=(node){2,l,r};
			sta.push_back(cnt);
		}
		else if(suf[i]=='&')
		{
			int r=sta.back();
			sta.pop_back();
			int l=sta.back();
			sta.pop_back();
			tree[++cnt]=(node){3,l,r};
			sta.push_back(cnt);
		}
		else
		{
			tree[++cnt]=(node){suf[i]-'0'};
			sta.push_back(cnt);
		}
	}
}
int dfs(int u)
{
//	cout<<u<<' '<<tree[u].v<<' '<<tree[u].l<<' '<<tree[u].r<<endl;
	if(tree[u].v==0||tree[u].v==1)
	{
		return tree[u].v;
	}
	else if(tree[u].v==2)
	{
		int tmp=dfs(tree[u].l);
		if(tmp==1)
		{
			ans_2++;
			return 1;
		}
		else
		{
			return dfs(tree[u].r);
		}
	}
	else
	{
		int tmp=dfs(tree[u].l);
		if(tmp==0)
		{
			ans_1++;
			return 0;
		}
		else
		{
			return dfs(tree[u].r);
		}
	}
}
int main()
{
	scanf("%s",str+1);
	change();
	build();
	printf("%d\n",dfs(cnt));
	printf("%d %d",ans_1,ans_2);
	return 0;
}
2024/10/21 16:27
加载中...