You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python快速读取输入方法咨询(USACO竞赛场景)

更高效的Python竞赛输入读取方法

你的原代码不仅效率偏低,还存在潜在bug——比如如果第一行的n是两位数(比如10 3),用list(input())拆分字符的方式会把n错读成第一位数字。针对竞赛场景的大数据输入,推荐用以下几种更快速且健壮的方法:

方法一:一次性读取所有输入(最推荐)

直接用sys.stdin.read()把所有输入内容一次性读入,再分割成整数列表,这种方式能最大程度减少IO开销,是竞赛中处理大量输入的最优解:

import sys

# 读取所有输入并转换为整数列表
all_data = list(map(int, sys.stdin.read().split()))
n = all_data[0]
k = all_data[1]
# 从第2个元素开始取n个数字作为diamonds
diamonds = all_data[2:2+n]

方法二:按行批量读取

如果不想一次性读取全部内容,也可以先把所有行读入内存再处理,比循环调用input()效率高:

import sys

# 读取所有非空行
lines = [line.strip() for line in sys.stdin if line.strip()]
# 处理第一行
n, k = map(int, lines[0].split())
# 处理后续n行
diamonds = list(map(int, lines[1:n+1]))

为什么这些方法更快?

原代码循环调用input()时,每次都会触发一次IO操作,当输入数据量很大(比如上万条数据)时,频繁的IO会导致程序运行变慢。而一次性读取所有内容或批量读取行,能把IO操作的次数降到最低,大幅提升输入处理速度。

另外,这些方法也解决了原代码的健壮性问题,不管n和k是几位数,都能正确读取。

内容的提问来源于stack exchange,提问作者Darren Pan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:10:22