社区讨论

为什么 pj T3 洛谷官方数据测的 100,实际成绩 0?

学术版参与者 7已保存回复 10

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@locxog8s
此快照首次捕获于
2023/10/30 21:26
2 年前
此快照最后确认于
2023/11/05 07:49
2 年前
查看原帖
RT,代码如下:
CPP
#include<bits/stdc++.h>
using namespace std;
#define reg register
#define rd io :: read
#define gtc io :: gtc
const int N = 1e7;
struct Node {
  int op, c, val, rev, ls, rs;
} tr[N];
char str[N];
int n, q, len, x[N], idx[N], id, ptr;
void build(int k) {
  while (id && isspace(str[id])) --id;
  while (id && str[id] == '!') {
    tr[k].rev ^= 1, --id;
    while (id && isspace(str[id])) --id;
  }
  while (id && isspace(str[id])) --id;
  if (!id) return ;
  if (isdigit(str[id])) {
    int tmp = 0, bas = 1;
    while (id && isdigit(str[id])) tmp += (str[id] - '0') * bas, bas *= 10, --id;
    idx[tmp] = k, tr[k].val = x[tmp] ^ tr[k].rev;
    tr[k].c = 0;
    return ;
  }
  tr[k].ls = ++ptr, tr[k].rs = ++ptr;
  char tp = str[id--]; tr[k].c = tp;
  build(tr[k].ls), build(tr[k].rs);
  if (tp == '&') tr[k].val = tr[tr[k].ls].val & tr[tr[k].rs].val;
  else tr[k].val = tr[tr[k].ls].val | tr[tr[k].rs].val;
  tr[k].val ^= tr[k].rev;
}
void calc(int k) {
  if (!tr[k].c) return ;
  if (tr[k].op == 2) {
    tr[tr[k].ls].op = tr[tr[k].rs].op = 2;
    calc(tr[k].ls), calc(tr[k].rs);
    return ;
  }
  if (tr[k].c == '&') {
    tr[tr[k].ls].op = tr[tr[k].rs].val == 0 ? 2 : tr[k].op, tr[tr[k].rs].op = tr[tr[k].ls].val == 0 ? 2 : tr[k].op;
  }
  else {
    tr[tr[k].ls].op = tr[tr[k].rs].val == 1 ? 2 : tr[k].op, tr[tr[k].rs].op = tr[tr[k].ls].val == 1 ? 2 : tr[k].op;
  }
  calc(tr[k].ls), calc(tr[k].rs);
}
int main() {
  reg char ch;
  while (ch = getchar(), (!isspace(ch) || ch == ' '))
    if (ch != 'x') str[++len] = ch;
  scanf("%d", &n);
  for (reg int i = 1; i <= n; ++i) scanf("%d", x + i);
  id = len, build(++ptr);
  tr[1].op = 1;
  calc(1);
  int ans = tr[1].val;
  scanf("%d", &q);
  for (reg int i = 1; i <= q; ++i) {
    int t; scanf("%d", &t);
    int tt = idx[t];
    if (tr[tt].op == 2) printf("%d\n", ans);
    else printf("%d\n", ans ^ 1);
  }
  return 0;
}

回复

10 条回复,欢迎继续交流。

正在加载回复...