luogu#P4711. 「化学」相对分子质量

    ID: 8737 远端评测题 1000ms 125MiB 尝试: 0 已通过: 0 难度: 4 上传者: 标签>模拟字符串递归Special JudgeO2优化洛谷月赛

「化学」相对分子质量

题目描述

做化学题时,小 F 总是里算错相对分子质量,这让他非常苦恼。

小 F 找到了你,请你来帮他算一算给定物质的相对分子质量。

如果你没有学过相关内容也没有关系,你可以从样例和提示里理解该题所求内容。

输入格式

输入一行,为一个长度为 LL (L100)(L\leq 100) 的不含空格的字符串,表示给定物质的化学式。

化学式仅包括以下内容:

  • 元素:如 Au(金),Hf(铪),出现的所有元素及其相对原子质量以附表为准
  • 下标 _{} :表示某个原子、离子或者原子团的个数,如 H_{2}O 表示 H2OH_2O (水),C_{60} 表示 C60C_{60} (足球烯)。
  • 括号 ():表示一个原子团,下标对团内物质生效。如 Ca(OH)_{2} 表示 Ca(OH)2Ca(OH)_2 (熟石灰)。
  • 水合物 ~:如 CuSO_{4}~5H_{2}O 表示 CuSO45H2OCuSO_4 \cdot 5H_2O(胆矾)。水之前如果存在数字,保证一定是大于 22 的正整数,如果省略该部分则默认为 11 。如上述胆矾中,表示水的个数的 5

形式化地讲,你处理的化学式满足以下规则:

分子~数量H_{2}O

其中数量或水合部分可省。

对于分子,满足:

部分_{数量}部分_{数量}...部分_{数量}

其中数量可省。

对于每个“部分”(原子,原子团,离子……),满足:

元素

(元素_{ 数量 }元素_{ 数量}... 元素_{数量})

其中数量可省。

请注意,满足上述条件的化学式不会出现括号嵌套;上文中出现的 “数量” 所指代的数字不超过 1000010000

输出格式

输出一行,包含一个整数或者小数部分为 .5 的实数,为你的计算结果。

保证结果不超过 1000010000

Au
197
HfO_{2}
210.5
Ca(OH)_{2}
74
CuSO_{4}~5H_{2}O
250
KAl(SO_{4})_{2}~12H_{2}O
474

提示

样例解释

Au:197Au : 197

二氧化铪 HfO2:178.5+2×16=210.5HfO_{2}: 178.5 + 2 \times 16= 210.5

氢氧化钙(熟石灰)Ca(OH)2:40+(1+16)×2=74Ca(OH)_2 : 40 + (1 + 16) \times 2 = 74

五水硫酸铜(胆矾)$CuSO_4 \cdot 5H_2O: 64 + 32 + 16 \times 4 + 5 \times (1 \times 2 + 16) = 250$

十二水合硫酸铝钾(明矾)KAl(SO4)212H2OKAl(SO_{4})_{2} \cdot 12H_{2}O (嗯 用心感受 474474 是对的)

附表:可能用到的相对原子质量

元素 相对原子质量
H 1
C 12
N 14
O 16
F 19
Na 23
Mg 24
Al 27
Si 28
P 31
S 32
Cl 35.5
K 39
Ca 40
Mn 55
Fe 56
Cu 64
Zn 65
Ag 108
I 127
Ba 137
Hf 178.5
Pt 195
Au 197
Hg 201

提示

如果你没有学习过相关内容,下面的内容可能有帮助:

zcy 教你算相对分子质量

  1. 每个元素以大写开头;
  2. 计算分子质量的方法就是对每个原子出现的次数乘对应的相对原子质量求和;
  3. ~( \cdot ) 相当于加;
  4. 下标相当于乘。