表达式求值
表达式求值
时间限制:\(1s\)
空间限制:\(256MB\)
题目描述
这学期,青雀同学正在学习计算机学科的重要课程--数据结构。表达式求值素来是栈的经典应用实例,而青雀同学天资聪颖,这根本难不倒她。看到青雀上课总是摸鱼,符玄老师实在是看不下去了,就给她布置了一个不一样的表达式求值。
我们都知道,上课所讲的表达式一般由以下三部分内容构成: 实数(一般范围是\(32\)位整型或者\(64\)位浮点类型等),运算符(一般主要有\(+、-、*、/\)等),左右括号。当然,符玄老师的不一样肯定不是把\(32\)位整型变成任意大的整数,毕竟这没有什么意思,对于青雀也没有什么难度。符玄老师的特殊表达式是这样构成的:数字(只有\(0\)和\(1\)两种),运算符(只有&\(、|、!\)三种),左右括号(调整优先级,与正常表达式的括号相同)。下面将简要讲述三个运算符的作用与优先级。
&是一个双目运算符,当且仅当\(a,b\)同为\(1\)时,\(a\)&\(b\)的值为\(1\).
\(|\)是一个双目运算符,当且仅当\(a,b\)同为\(0\)时, \(a|b\)的值为\(0\).
\(!\)是一个单目运算符,如果\(a\)为\(0\),那么\(!a\)的值为\(1\),如果\(a\)为\(1\),那么\(!a\)的值为\(0\).
&和\(|\)是同级运算符,\(!\)的优先级高于二者。
由上面的作用可以看出,任意一个合法的特殊表达式的值一定是\(0\)与\(1\)中的一个。而你的任务就是将它们确定出来,以便符玄老师检查青雀同学作业的正确性。每个测试点有五组测试用例。
数据格式
输入
共五行,每个测试用例一行,一个合法的特殊表达式。
输出
每个测试用例一行,表达式的结果\(0\)或者\(1\).
样例
输入
!((!0&1)|0|(1&0)&1)
!!!!!!!!!!!!!!!!!!1
!((0))|0
(((((1&!0)))))
(1&1)|(0&0)
输出
0
1
1
1
1
数据范围及约定
每个表达式的长度不超过\(10^5\),数字的个数不超过\(10^4\).
提示
你可能会使用这段
python
代码
for _ in range(5):
print(int(eval(input().replace('0', 'False').replace('1', 'True').replace('!', ' not ').replace('&', ' and ').replace('|', ' or '))))
但是,我必须提醒你的是,在
python
的实现中,and
的优先级是在or
之上的,而本题要求二者同级,所以你并不能这么做。
信息
- ID
- 1521
- 难度
- 9
- 分类
- (无)
- 标签
- (无)
- 递交数
- 12
- 已通过
- 3
- 通过率
- 25%
- 上传者