#C1012. [CSP-J 2020T3] 表达式
[CSP-J 2020T3] 表达式
[CSP-J 2020] 表达式
题目描述
小 C 热衷于学习数理逻辑。有一天,他发现了一种特别的逻辑表达式。在这种逻辑表达式中,所有操作数都是变量,且它们的取值只能为 或 。表达式使用后缀表达式给出,运算从左到右按后缀规则进行。
本题中只有以下三种运算:
- 与运算
a & b:当且仅当 和 的值都为 时结果为 ,否则为 。 - 或运算
a | b:当且仅当 和 的值都为 时结果为 ,否则为 。 - 取反运算
!a:当 的值为 时结果为 ,否则为 。
给定一个逻辑表达式和其中每个变量的初值。之后有若干次询问,每次临时取反某一个变量的值,要求输出该次询问下原表达式的值。每次询问之间互不影响。
为便于处理,表达式采用后缀表达式输入。操作数由小写字母 x 与一个正整数拼接而成,例如 x10 表示变量 。数据保证每个变量在表达式中恰好出现一次。
输入格式
第一行一个字符串 ,表示后缀逻辑表达式。
第二行一个正整数 ,表示变量数量。表达式中变量下标为 。
第三行 个整数,第 个整数表示变量 的初值。
第四行一个正整数 ,表示询问数量。
接下来 行,每行一个正整数,表示需要临时取反的变量下标。
输出格式
输出 行,每行一个 或 ,表示对应询问下表达式的值。
样例 #1
输入 #1
x1 x2 & x3 |
3
1 0 1
3
1
2
3
输出 #1
1
1
0
样例 #2
输入 #2
x1 ! x2 x4 | x3 x5 ! & & ! &
5
0 1 0 1 1
3
1
3
5
输出 #2
0
1
1
数据范围与提示
样例 #1 的中缀形式为 。
- 取反 后,三个操作数依次为 ,表达式值为 。
- 取反 后,三个操作数依次为 ,表达式值为 。
- 取反 后,三个操作数依次为 ,表达式值为 。
样例 #2 的中缀形式为 $(\operatorname{not}x_1)\operatorname{and}(\operatorname{not}((x_2\operatorname{or}x_4)\operatorname{and}(x_3\operatorname{and}(\operatorname{not}x_5))))$。
数据范围与提示
- 对于 的数据,表达式中只有与运算或只有或运算。
- 对于另外 的数据,,,。
- 对于另外 的数据,所有变量的初值全为 或全为 。
- 对于 的数据,,,。
其中 表示字符串 的长度。