#YDRB002E. 真值表
真值表
题目描述
给出一个含布尔变量的布尔表达式,请计算其真值表
布尔表达式由布尔变量、小括号与运算符组成。具体来说,表达式的结构定义如下:
- 一个小写英文字符
a ~ z
是一个可以取 0 或 1 的布尔变量,是一个表达式 - 如果
A
是一个表达式,则(A)
也是表达式 - 如果
A
是一个表达式,则!A
也是表达式 - 如果
A
、B
是表达式,则A|B
、A&B
、A^B
、A=B
也是表达式
运算符 !
、|
、&
、^
、=
的真值表如下:
运算符的优先级从高到低为 !
、&
、|
、^
、=
。例如:对于表达式 a&!b|c
,计算顺序为 (a&(!b))|c
。多个相同运算符则从左往右依次计算
现要求枚举表达式中出现过的每个变量的取值并计算表达式,由此得到真值表
输入格式
输入共 行
第一行一个整数 ,表示测试数据的组数
接下来 行,每行一个字符串,表示该组数据提供的表达式
输出格式
输出共 行
每行为一个长度为 ,仅由字符 0
和 1
组成的字符串。其中 为该组数据所给表达式中不同的布尔变量数量。要求将变量按字典序从小到大排序后依次枚举取值为 0
或 1
。可参考样例解释理解
样例数据
样例一
input
1
(p&q)|((q&p)=(q=!p))
output
1001
解释
- 时表达式值为
- 时表达式值为
- 时表达式值为
- 时表达式值为
依次输出得到字符串 1001
样例二
input
1
!(!!(!!a|b&c))
output
11100000
样例三
input
1
!(!!(!a|b&c))&(!(((b^c=d=e))))|(a=b)
output
11111111000000001001011011111111
样例四
input
3
(!!!!!!m^!y=!!y^r&m&r=e^!v|!(y)&(y))
!(!!!!(!((!t|!y^(y)&t&t&(y|(!w))))))
(!(!(z|r))=!r|!z)=k|k&(z)&!!r=!!!k|z
output
00110011110000111100110000111100
11111111
10011100
数据范围与约定
子任务编号 | 分值 | 特殊性质 |
---|---|---|
表达式中不含括号和 ! 运算符 |
||
每个表达式中只有一个变量,且只出现一次 | ||
表达式中不含 ! 运算符 |
||
无 |
对于所有数据,有 , 表达式长度 , 每个表达式内本质不同的变量数量
本题子任务一不进行捆绑测试