社区讨论
求助
P7073[CSP-J 2020] 表达式参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @lo1moq5l
- 此快照首次捕获于
- 2023/10/22 23:33 2 年前
- 此快照最后确认于
- 2023/11/03 00:17 2 年前
40pts,WA,帮帮蒟蒻QAQ
CPP#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long l;
typedef bool b;
l n, q, lef[1000005], rig[1000005], now;
char lx[1000005];
b f[1000005], a[1000005], ans;
struct Stact
{
l x[100005];
l t = 0;
void push(l v)
{
t++;
x[t] = v;
}
void pop()
{
t--;
}
l top()
{
return x[t];
}
} st;
string s;
int main()
{
getline(cin, s);
scanf("%lld", &n);
now = n;
for (l i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
lx[i] = 0;
}
for (l i = 0; i < s.size(); ++i)
{
if (s[i] == '&')
{
lx[++now] = '&';
rig[now] = st.top();
st.pop();
lef[now] = st.top();
st.pop();
a[now] = a[lef[now]] && a[rig[now]];
st.push(now);
}
if (s[i] == '|')
{
lx[++now] = '|';
rig[now] = st.top();
st.pop();
lef[now] = st.top();
st.pop();
a[now] = a[lef[now]] || a[rig[now]];
st.push(now);
}
if (s[i] == '!')
{
lx[++now] = '!';
lef[now] = st.top();
st.pop();
a[now] = !a[lef[now]];
st.push(now);
}
if (s[i] == 'x')
{
l v = 0;
i++;
while (s[i] != ' ')
{
v = v * 10 + (l)(s[i] - '0');
i++;
}
st.push(v);
}
}
ans = a[st.t];
f[now] = 1;
for (l i = now; i > n; --i)
{
if (lx[i] == '&')
{
if (((!a[lef[i]]) && a[rig[i]]) != a[i]) f[lef[i]] = f[i];
if ((a[lef[i]] && (!a[rig[i]])) != a[i]) f[rig[i]] = f[i];
}
else if (lx[i] == '|')
{
if (((!a[lef[i]]) || a[rig[i]]) != a[i]) f[lef[i]] = f[i];
if ((a[lef[i]] || (!a[rig[i]])) != a[i]) f[rig[i]] = f[i];
}
else f[lef[i]] = f[i];
}
scanf("%lld", &q);
for (l i = 1; i <= q; ++i)
{
l t;
scanf("%lld", &t);
printf("%d\n", f[t] ^ ans);
}
return 0;
}
悬赏观猪关注
回复
共 5 条回复,欢迎继续交流。
正在加载回复...