#19236. 化学式分子量的计算

化学式分子量的计算

化学,是物质的诗篇。每一个分子都是一个微小的宇宙,原子按照严格的数学韵律在其中起舞。而相对分子质量(Relative Molecular Mass),就是衡量这首诗篇“分量”的标尺。

为了考察学生对字符串解析(String Parsing)、**哈希表(Hash Map)以及栈(Stack)**的掌握程度,我为你构思了这道题目。它模拟了化学家计算物质摩尔质量的过程,是一个经典的“表达式求值”问题的变体。


[OI 题库] 门捷列夫的账单 (Mendeleev's Receipt)

题目背景

“如果你不能量化它,你就不能理解它。” —— 现代化学之父们

在星际飞船的合成实验室里,AI 助手“门捷列夫”需要合成各种复杂的化合物。为了精确配比原料,它必须迅速计算出任何给定化学式的相对分子质量。

化学式的书写规则如下:

  1. 元素符号:由一个大写字母,或者一个大写字母加一个小写字母组成(如 H, O, Na, Cl)。
  2. 原子个数:元素右下角的数字表示个数(如 H2 表示 2 个 H)。如果省略,默认为 1。
  3. 原子团:可以用括号 () 将一部分括起来,括号外的数字表示整个原子团的倍数(如 Ca(OH)2,表示 1 个 Ca 和 2 个 OH 原子团)。括号可以嵌套。

你需要编写程序,帮助“门捷列夫”计算出给定化学式的总相对分子质量。

题目描述

输入包含两部分:

  1. 一张元素周期表:包含 NN 个元素的符号和它们的相对原子质量(整数)。
  2. 一个化学式字符串 SS

请输出该化学式的相对分子质量。

输入格式

第一行一个整数 NN,表示已知元素的数量。 接下来 NN 行,每行包含一个字符串(元素符号)和一个整数(相对原子质量),以空格分隔。 最后一行,一个字符串 SS,表示需要计算的化学式。

输出格式

一个整数,表示总相对分子质量。

样例数据

样例 1 (水)

2
H 1
O 16
H2O
18

样例 2 (葡萄糖)

3
C 12
H 1
O 16
C6H12O6
180

样例 3 (嵌套括号 - 某种复杂的晶体)

4
K 39
Al 27
S 32
O 16
KAl(SO4)2
258

(解析:K=39, Al=27. SO4 = 32 + 16*4 = 96. (SO4)2 = 96*2 = 192. Total = 39+27+192 = 258)

数据范围

  • 1N1001 \le N \le 100
  • 化学式 SS 的长度不超过 1000。
  • 相对原子质量和最终结果均在 int 范围内(不会超过 23112^{31}-1)。
  • 保证化学式合法,括号匹配正确,且出现的所有元素均在给定的周期表中。