/ Vijos / 题库 /

Caculator

Caculator

描述

计算器是生活中的常用计算工具,可以用来计算各种各样的代数式的值。不过它是有些缺点的,一个主要的问题是它只支持常量的运算。对于同样形式的代数式,仅仅是因为常量的不同就需要重新输入一遍。

程序员们则可以使用高级语言中的表达式求值。在Pascal/C++语言中,表达式是一个很基础的概念。表达式中可以出现变量、常量、运算符、括号,甚至各种各样的函数。

这里我们仅考虑这样的表达式:它由52个大小写英文字母、数字'0'~'9',和’(’、’)’、’+’、’-’、’*’、’/'这些符号组成。每个运算符都只执行双目运算符的功能,即它的左右两侧都必须是可计算的量。特别的,这里使用'/'符号表示整除。而连续的英文字母组成的单词则表示变量名,且变量名仅由字母组成。为了简化问题,表达式中的常量均为绝对值不超过10^9的自然数,且无前导0。表达式的计算方法和在源程序中是一样的,即小括号优先级最高、而'*'、'/'运算符优先级高于'+'、‘-’运算符,同一优先级从左到右按顺序计算。

你的任务,就是对于一个给定的表达式,实现它的计算功能。我们将声明N个变量,并在表达式中引用这些变量。然后给出T组数据。每组数据都是N个变量的一组取值。你需要对每组数据计算此时表达式的返回值。

格式

输入格式

输入文件的第一行包括两个整数N, T,依次表示表达式中引用的变量的数目,以及N个变量的需要计算的取值组数。

接下来N行,每行一个由英文字母组成的字符串,依次表示每个变量名。

接下来一行,一个字符串,表示表达式的内容。

接下来T行,每行N个整数,依次表示每个变量这时的取值。

输出格式

输出文件包括T行,第i行表示N个变量取输入的第i组数值时表达式的答案。

如果在运算过程中出现整数被0除,或者运算过程的中间结果的绝对值大于10^9,输出”Error!”;否则输出一个整数,表示运算结果。运算的中间结果指从左到右按优先级顺序计算时得到的每个数值。

样例1

样例输入1

2 3
x
total
1+(total/x)
1 3
2 155
0 0

样例输出1

4
78
Error!

限制

1s

提示

20%的数据满足,表达式中没有小括号。

另外20%的数据满足,表达式中没有加法或减法运算。

另外20%的数据满足,表达式中没有乘法或除法运算。

80%的数据(包括上述在内)满足,表达式的长度不超过100。

100%的数据满足,1 <= N <= 100,1 <= T <= 10,变量名长度不超过10,表达式长度不超过100,000。变量的取值和表达式中的常量是绝对值不超过10^9的自然数。所有变量名互不相同。

信息

ID
1765
难度
8
分类
模拟 | 字符串 | 表达式处理 点击显示
标签
(无)
递交数
158
已通过
22
通过率
14%
被复制
1
上传者

相关

在下列训练计划中:

RP++分类题库

在下列比赛中:

NOIP2012模拟赛第三弹