#P2045. Molecular Formula
Molecular Formula
本题没有可用的提交语言。
描述
在这个问题中,你的任务是编写一个计算机程序,用于操作虚拟化学中的分子式。与真实化学一样,每个分子式表示由一个或多个原子组成的分子。然而,它可能没有化学现实性。
以下是原子符号和分子式的定义。
分子中的原子用原子符号表示,原子符号可以是一个大写字母,或者是一个大写字母后面跟一个小写字母。例如,H 和 He 都是原子符号。
分子式是由一个或多个原子符号组成的非空序列。例如,HHHeHHHe 是一个分子式,表示一个由四个 H 和两个 He 组成的分子。
为了方便起见,相同的子公式 X...X(其中 n 是 2 到 99 之间的整数)可以用 (X)n 的形式缩写。如果 X 是原子符号,可以省略括号。例如,HHHeHHHe 也可以写成 H2HeH2He、(HHHe)2、(H2He)2,甚至是 ((H)2He)2。
所有分子式可以被视为一种形式语言。总结上述描述,分子式的语法定义如下:
Molecule -> Atom | Atom Number | ( Molecule ) Number | Molecule Molecule
Atom -> CapitalLetter | CapitalLetter SmallLetter
Number -> 2 | 3 | 4 | ... | 97 | 98 | 99
CapitalLetter -> A | B | C | ... | X | Y | Z
SmallLetter -> a | b | c | ... | x | y | z
在我们的虚拟化学中,每个原子都有自己的原子量。给定原子的重量,你的程序应该计算由分子式表示的分子的重量。分子量定义为组成原子的重量之和。例如,假设符号为 H 和 He 的原子的原子量分别为 1 和 4,则由 (H2He)2 表示的分子的总重量为 12。
输入
输入包含两部分。第一部分是原子表,由多行组成,每行包含一个原子符号、一个或多个空格和它的原子量(一个不超过1000的正整数)。没有两行包含相同的原子符号。
第一部分以一行仅包含字符串 END_OF_FIRST_PART 结束。
输入的第二部分是一个序列,每行是一个分子式,不超过80个字符,且不包含空格。一个分子最多包含10^5个原子。分子式中的一些原子符号可能不出现在原子表中。
该序列后面跟着一行,包含一个零,表示输入结束。
输出
输出是一个序列,每行对应输入的第二部分的一行。每行包含一个整数,如果给定的分子式中的所有原子符号都出现在原子表中,则为该分子式的分子量;否则为 UNKNOWN。不允许出现额外的字符。
输入数据 1
H 1
He 4
C 12
O 16
F 19
Ne 20
Cu 64
Cc 333
END_OF_FIRST_PART
H2C
(MgF)2As
Cu(OH)2
H((CO)2F)99
0
输出数据 1
14
UNKNOWN
98
7426
来源
2003年日本,会津