跳转至

PIO2 单组_A+B

入门通过率 82.54%python3样例通过牛客 AC

牛客原题  源码

讲解章节输入输出处理

一句话

一行两个整数,求和。

解题思路

这题考什么

输入形态:单组数据,且全部数据挤在同一行。 这是最简单的形态——数据量固定、行数固定,读入只需要一次调用。

读入拆成三步:input() 拿到整行文本,.split() 按空白切成字符串列表, map(int, ...) 把每个元素转成整数,最后用 a, b = ... 解包到两个变量。 map 返回的是惰性迭代器,解包时才真正逐个转换,不会额外建一个中间列表。

为什么这里可以放心用 input()

input() 的开销是按「调用次数」计的,不是按字节数计的。 本题只调用一次,慢一点也就是几微秒;换成 sys.stdin.buffer.read().split() 反而多写两行、多一个 import, 对读者理解毫无帮助。真正必须换掉 input() 的是行数上万的多组题 (PIO4 起),那里的差距是数量级级别的。

数据规模与复杂度

a, b 都不超过 1e9,和不超过 2e9。 2e9 已经超出 32 位有符号整数的上限 2147483647,C/C++ 里必须开 long long, Python 的 int 是任意精度的,不存在溢出问题,直接相加即可。 时间复杂度 O(1),空间 O(1)。

坑在哪

  1. 忘记 .split() 而直接写 int(input()),会因为字符串里含空格抛 ValueError。
  2. 解包的变量个数必须与这一行的 token 个数一致。写成 a, b, c = ... 会抛 「not enough values to unpack」;这类错误在 OJ 上表现为运行时错误而非答案错误。
  3. 本题的两个数保证在同一行。如果换成一行一个数的题面, 就必须调用两次 input(),不能沿用这一句。

参考实现

solutions/PIO2.py
a, b = map(int, input().split())
print(a + b)
[:octicons-arrow-left-16: PIO1](PIO1.md) [PIO3 :octicons-arrow-right-16:](PIO3.md)