#19310. 蛋白质的质量计算

蛋白质的质量计算

GESP 4级(相当于 CSP-J 普及组 T1/T2 难度)主要考察基础的模拟、字符串处理、数组映射以及简单的数学逻辑

这次我们选取高中生物必修一《分子与细胞》中关于蛋白质合成的核心考点—— 脱水缩合(Dehydration Condensation) 作为背景。这个过程涉及数量关系计算,非常适合转化为编程题。


题目:蛋白质的质量计算 (Protein Mass Calculator)

【背景知识讲解】

在高中生物必修一中,我们学习了生命活动的主要承担者——蛋白质。 蛋白质是由氨基酸连接而成的长链。

  1. 脱水缩合:两个氨基酸分子结合在一起形成二肽时,会脱去一分子水(H2OH_2O)。
  2. 肽键:连接两个氨基酸的化学键叫做肽键。
  3. 计算规律
    • 如果有 NN 个氨基酸连成一条链(称为多肽),那么会形成 N1N-1 个肽键,同时脱去 N1N-1 个水分子。
    • 蛋白质分子的相对分子质量 = 氨基酸总质量 - 脱去水的总质量
    • 水的相对分子质量为 1818

例如:有 3 个氨基酸,质量分别是 100, 120, 110。 它们连成一条链,脱去了 31=23-1=2 个水分子。 蛋白质总质量 = (100+120+110)2×18=33036=294(100+120+110) - 2 \times 18 = 330 - 36 = 294

【题目描述】

生物实验室合成了一条由 NN 个氨基酸组成的肽链。 为了计算这条肽链的相对分子质量,实验员给出了每种氨基酸的代号(一个大写字母)和它对应的相对分子质量。

现在给出一个长度为 NN 的字符串 SS,表示这条肽链的氨基酸序列。请你利用给定的氨基酸质量表,计算出这条肽链最终的相对分子质量。

计算公式提示

$$\text{总质量} = (\sum \text{所有氨基酸的质量}) - (\text{氨基酸数量} - 1) \times 18 $$

(注意:如果只有 1 个氨基酸,不会脱水,减去 0)

【输入格式】

第一行包含两个整数 KKNN,分别表示氨基酸的种类数量和肽链的长度。 接下来 KK 行,每行包含一个大写字母 CC 和一个整数 WW,表示氨基酸代号及其质量。 最后一行包含一个长度为 NN 的字符串 SS,表示肽链序列。

【输出格式】

输出一个整数,表示该肽链的相对分子质量。

【样例数据】

输入:

3 5
A 89
G 75
L 131
AGLLA

输出:

443

样例解释:

  • 氨基酸种类表:A=89, G=75, L=131。
  • 肽链序列:A G L L A (5个氨基酸)。
  • 氨基酸总质量:89+75+131+131+89=51589 + 75 + 131 + 131 + 89 = 515
  • 脱水数量:51=45 - 1 = 4 个水分子。
  • 脱水总质量:4×18=724 \times 18 = 72
  • 最终质量:51572=443515 - 72 = 443

【数据范围】

  • 对于 100% 的数据:1K261 \le K \le 261N1,0001 \le N \le 1,000
  • 氨基酸质量 WW 为整数,50W30050 \le W \le 300
  • 字符串 SS 只包含输入中给出的大写字母。
  • 保证最终结果在 int 范围内。

一、 思路提示

  1. 数据的存储(映射)
    • 题目给出了“字符 \to 整数”的对应关系。比如 'A' 对应 89。
    • 怎么快速查表呢?因为字符是大写字母,我们可以用一个数组来充当“字典”。
    • 定义 int weight[128]。如果输入 A 89,我们就存 weight['A'] = 89
    • 这样后续读到字符 c 时,直接用 weight[c] 就能拿到质量,速度最快。
  2. 累加求和
    • 遍历字符串 SS,把每个字符对应的质量加到 total_weight 变量中。
  3. 减去水的质量
    • 如果 N>1N > 1,需要减去 (N1)×18(N-1) \times 18
    • 如果 N=1N = 1,不需要减(或者套用公式 11=01-1=0,也没问题)。
    • 如果 N=0N = 0,题目虽然说 N1N \ge 1,但在编程中注意这种边界总是不亏的。

二、 预备知识点总结

  1. 数组映射(Hash Map 思想):利用 ASCII 码将字符作为数组下标,实现 O(1)O(1) 查找。
  2. 字符串遍历:使用 for 循环访问字符串的每一位。
  3. 基础数学:累加器和简单的算术运算。

三、 启发式教学:草稿纸上的推理过程

教练:“同学们,想象我们是一台电子秤。现在来了一串珠子(氨基酸),我们要称重。”

  1. 建立价格表

    • “先看说明书(输入前几行)。'A' 是 89克,'G' 是 75克... 把它写在黑板的角落,别忘了。”
    • 草稿操作:画个表格,A$\to89,G89, G\to$75。
  2. 称重过程

    • “传送带送来了序列 AGLLA。”
    • “第1个是 A,加 89。总重 89。”
    • “第2个是 G,加 75。总重 164。”
    • “第3个是 L,加 131... ”
    • “算出一共重 515。”
  3. 扣除包装皮(脱水)

    • “这5个珠子是连在一起的。每连接处都要挤出一滴水(重18)。”
    • “5个珠子有几个连接处?”(画图:O-O-O-O-O)
    • “4个缝隙。所以减去 4×18=724 \times 18 = 72。”
  4. 最终结果

    • 51572=443515 - 72 = 443。搞定!”

四、 读题关键词总结

  1. “代号和质量” \rightarrow 需要建立映射关系(数组或 map)。
  2. N1N-1 个水分子” \rightarrow 这是生物题转数学题的核心公式,千万别漏减,也别多减。
  3. “相对分子质量” \rightarrow 结果是整数,用 int 即可。