#C. 有趣的数理逻辑

    Type: RemoteJudge 1000ms 256MiB

有趣的数理逻辑

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

题目描述

辰辰是个好孩子,热衷于学习数理逻辑。有一天,他发现了一种特别的逻辑表达式。在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为 0011,运算从左往右进行。如果表达式中有括号,则先计算括号内的子表达式的值。特别的,这种表达式有且仅有以下几种运算:

  1. 与运算:a & b。当且仅当 aabb 的值都为 11 时,该表达式的值为 11。其余情况该表达式的值为 00
  2. 或运算:a | b。当且仅当 aabb 的值都为 00 时,该表达式的值为 00。其余情况该表达式的值为 11
  3. 取反运算:!a。当且仅当 aa 的值为 00 时,该表达式的值为 11。其余情况该表达式的值为 00

辰辰想知道,给定一个逻辑表达式和其中每一个操作数的初始取值后,再取反某一个操作数的值时,原表达式的值为多少。

为了化简对表达式的处理,我们有如下约定:

表达式将采用后缀表达式的方式输入。

后缀表达式的定义如下:

  1. 如果 EE 是一个操作数,则 EE 的后缀表达式是它本身。
  2. 如果 EEE1 op E2E_1~\texttt{op}~E_2 形式的表达式,其中 op\texttt{op} 是任何二元操作符,且优先级不高于 E1E_1E2E_2 中括号外的操作符,则 EE 的后缀式为 E1E2opE_1' E_2' \texttt{op},其中 E1E_1'E2E_2' 分别为 E1E_1E2E_2 的后缀式。
  3. 如果 EEE1E_1 形式的表达式,则 E1E_1 的后缀式就是 EE 的后缀式。

同时为了方便,输入中:

  1. 与运算符(&)、或运算符(|)、取反运算符(!)的左右均有一个空格,但表达式末尾没有空格
  2. 操作数由小写字母 xx 与一个正整数拼接而成,正整数表示这个变量的下标。例如:x10,表示下标为 1010 的变量 x10x_{10}。数据保证每个变量在表达式中出现恰好一次

输入格式

第一行包含一个字符串 ss,表示上文描述的表达式。 第二行包含一个正整数 nn,表示表达式中变量的数量。表达式中变量的下标为 1,2,,n1,2, \cdots , n。 第三行包含 nn 个整数,第 ii 个整数表示变量 xix_i 的初值。 第四行包含一个正整数 qq,表示询问的个数。 接下来 qq 行,每行一个正整数,表示需要取反的变量的下标。注意,每一个询问的修改都是临时的,即之前询问中的修改不会对后续的询问造成影响。 数据保证输入的表达式合法。变量的初值为 0011

输出格式

输出一共有 qq 行,每行一个 0011,表示该询问下表达式的值。

x1 x2 & x3 |
3
1 0 1
3
1
2
3
1
1
0
x1 ! x2 x4 | x3 x5 ! & & ! &
5
0 1 0 1 1
3
1
3
5
0
1
1

提示

样例 1 解释

该后缀表达式的中缀表达式形式为 (x1andx2)orx3(x_1 \operatorname{and} x_2) \operatorname{or} x_3

  • 对于第一次询问,将 x1x_1 的值取反。此时,三个操作数对应的赋值依次为 000011。原表达式的值为 (0&0)1=1(0\&0)|1=1
  • 对于第二次询问,将 x2x_2 的值取反。此时,三个操作数对应的赋值依次为 111111。原表达式的值为 (1&1)1=1(1\&1)|1=1
  • 对于第三次询问,将 x3x_3 的值取反。此时,三个操作数对应的赋值依次为 110000。原表达式的值为 (1&0)0=0(1\&0)|0=0

样例 2 解释

该表达式的中缀表达式形式为 (notx1)and(not((x2orx4)and(x3and(notx5))))(\operatorname{not}x_1)\operatorname{and}(\operatorname{not}((x_2\operatorname{or}x_4)\operatorname{and}(x_3\operatorname{and}(\operatorname{not}x_5))))

数据规模与约定

  • 对于 20%20\% 的数据,表达式中有且仅有与运算(&)或者或运算(|)。
  • 对于另外 30%30\% 的数据,s1000|s| \le 1000q1000q \le 1000n1000n \le 1000
  • 对于另外 20%20\% 的数据,变量的初值全为 00 或全为 11
  • 对于 100%100\% 的数据,1s1×1061 \le |s| \le 1 \times 10^61q1×1051 \le q \le 1 \times 10^52n1×1052 \le n \le 1 \times 10^5

其中,s|s| 表示字符串 ss 的长度。

北辰OI CSP-J模拟测试(三)

Not Attended
Status
Done
Rule
IOI
Problem
4
Start at
2023-10-1 8:00
End at
2023-10-1 12:00
Duration
4 hour(s)
Host
Partic.
1