社区讨论
关于输出
灌水区参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @m2ir8lfx
- 此快照首次捕获于
- 2024/10/21 16:28 去年
- 此快照最后确认于
- 2024/10/21 19:19 去年
为啥我这么写,后两项不会正常输出,只会输出0
CPPint main()
{
scanf("%s",str+1);
change();
build();
printf("%d\n%d %d",dfs(cnt),ans_1,ans_2);
return 0;
}
但是这么写就正常输出了
CPPint main()
{
scanf("%s",str+1);
change();
build();
printf("%d\n",dfs(cnt));
printf("%d %d",ans_1,ans_2);
return 0;
}
input:
CPP0&(1|0)|(1|1|1&0)
out:
CPP1
1 2
完整程序
CPP#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;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...