表达式求值

表达式求值

表达式求值

时间限制:\(1s\)

空间限制:\(256MB\)

题目描述

这学期,青雀同学正在学习计算机学科的重要课程--数据结构。表达式求值素来是栈的经典应用实例,而青雀同学天资聪颖,这根本难不倒她。看到青雀上课总是摸鱼,符玄老师实在是看不下去了,就给她布置了一个不一样的表达式求值。

我们都知道,上课所讲的表达式一般由以下三部分内容构成: 实数(一般范围是\(32\)位整型或者\(64\)位浮点类型等),运算符(一般主要有\(+、-、*、/\)等),左右括号。当然,符玄老师的不一样肯定不是把\(32\)位整型变成任意大的整数,毕竟这没有什么意思,对于青雀也没有什么难度。符玄老师的特殊表达式是这样构成的:数字(只有\(0\)和\(1\)两种),运算符(只有&\(、|、!\)三种),左右括号(调整优先级,与正常表达式的括号相同)。下面将简要讲述三个运算符的作用与优先级。

  1. &是一个双目运算符,当且仅当\(a,b\)同为\(1\)时,\(a\)&\(b\)的值为\(1\).

  2. \(|\)是一个双目运算符,当且仅当\(a,b\)同为\(0\)时, \(a|b\)的值为\(0\).

  3. \(!\)是一个单目运算符,如果\(a\)为\(0\),那么\(!a\)的值为\(1\),如果\(a\)为\(1\),那么\(!a\)的值为\(0\).

  4. &和\(|\)是同级运算符,\(!\)的优先级高于二者。

由上面的作用可以看出,任意一个合法的特殊表达式的值一定是\(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%
上传者