社区讨论
55求调
P7073[CSP-J 2020] 表达式参与者 5已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @m0pee4zg
- 此快照首次捕获于
- 2024/09/05 22:43 2 年前
- 此快照最后确认于
- 2025/11/04 21:42 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
int n,q,top,m,idx;
int w[1000005],stk[1000005],h[1000005],ne[1000005],e[1000005];
bool vis[1000005];
char op[1000005];
void add(int a,int b)
{
e[++idx]=b;
ne[idx]=h[a];
h[a]=idx;
}
int dfs1(int u)
{
if(u<=n)
{
return w[u];
}
if(op[u]=='!')
{
return w[u]=!dfs1(e[h[u]]);
}
if(op[u]=='&')
{
w[u]=1;
for(int i=h[u];i;i=ne[i])
{
w[u]&=dfs1(e[i]);
}
return w[u];
}
if(op[u]=='|')
{
w[u]=0;
for(int i=h[u];i;i=ne[i])
{
w[u]|=dfs1(e[i]);
}
return w[u];
}
}
void dfs2(int u)
{
vis[u]=1;
if(u<=n)
{
return;
}
if(op[u]=='!')
{
return dfs2(e[h[u]]);
}
else
{
int a=e[h[u]],b=e[ne[h[u]]];
if(op[u]=='&')
{
if(w[a])
{
return dfs2(b);
}
if(w[b])
{
return dfs2(a);
}
}
else if(op[u]=='|')
{
if(!w[a])
{
return dfs2(b);
}
if(!w[b])
{
return dfs2(a);
}
}
}
}
signed main()
{
//freopen("string.in", "r", stdin);
//freopen("string.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
getline(cin,s);
cin>>n;
m=n;
for(int i=1;i<=n;i++)
{
cin>>w[i];
}
for(int i=0;i<s.size();i++)
{
if(s[i]=='x')
{
i++;
int num=0;
while(s[i]>='0'&&s[i]<='9')
{
num=num*10+s[i]-'0';
i++;
}
stk[++top]=num;
}
else if(s[i]=='!')
{
op[++m]=s[i];
add(m,stk[top--]);
stk[++top]=m;
}
else if(s[i]=='&'||s[i]=='|')
{
op[++m]=s[i];
add(m,stk[top--]);
add(m,stk[top--]);
stk[++top]=m;
}
}
int root=stk[top];
int sum=dfs1(root);
dfs2(root);
cin>>q;
while(q--)
{
int x;
cin>>x;
if(vis[x])
{
cout<<!sum<<'\n';
}
else
{
cout<<sum<<'\n';
}
}
return 0;
}
/*
*/
回复
共 7 条回复,欢迎继续交流。
正在加载回复...