acm模式下,python处理输入输出需高效且精确。以下是常见输入输出场景的分类解析、代码模板及避坑指南。
一、acm模式 vs. 核心代码模式
| 特性 | acm模式 | 核心代码模式(如leetcode) |
|---|---|---|
| 输入输出 | 需自行处理标准输入(sys.stdin/input()) | 系统自动处理输入,只需实现函数逻辑 |
| 代码结构 | 包含if __name__ == '__main__':和主逻辑 | 仅需写函数体 |
| 适用场景 | 牛客、赛码等大厂笔试平台 | 力扣等在线刷题平台 |
| 常见错误 | 格式错误(pe)、未处理多组数据 | 逻辑错误为主 |
二、输入处理详解(附python代码模板)
1. 单行输入
- 场景:一行含固定数量数据(如两个整数)
- 代码:
a, b = map(int, input().split()) # 分割后转整型
- 注意:
split()默认按空格分割,若用逗号则改为split(',')
2. 多行输入(已知行数)
- 场景:首行指定后续数据行数(如矩阵行数)
- 代码:
n = int(input()) # 读取行数 data = [list(map(int, input().split())) for _ in range(n)] # 二维列表
3. 多组输入(未知行数,以eof结束)
- 场景:数据组数未知,直到文件结束(如a+b问题的多组测试)
- 代码:
import sys
for line in sys.stdin:
a, b = map(int, line.split())
# 处理逻辑
或(兼容终端输入):
while true:
try:
a, b = map(int, input().split())
except eoferror:
break
4. 不定长一维数组
- 场景:单行数据量不定(如
1 2 3 4) - 代码:
arr = list(map(int, input().split())) # 直接转为整型列表
5. 字符串处理
- 场景:含空格或特殊分隔符的字符串
- 代码:
s = input().strip() # 去除首尾空格 words = s.split() # 默认按空格分割单词
若需保留空格:
s = sys.stdin.readline().strip() # 整行读取
6. 复杂结构(多测试用例)
- 场景:首行为测试用例数
t,每用例含多行数据 - 代码:
t = int(input())
for _ in range(t):
n = int(input()) # 当前用例数据行数
for i in range(n):
row = list(map(int, input().split()))
# 处理逻辑
三、输出处理技巧
1. 基础输出
- 单值输出:
print(result) - 数组输出(空格分隔):
arr = [1, 2, 3]
print(" ".join(map(str, arr))) # 输出 "1 2 3"
2. 格式化输出
- 保留小数:
print(f"{3.14159:.2f}") # 输出 3.14 - 补前导零:
print(f"{5:03d}") # 输出 005
3. 高性能输出(减少i/o次数)
output_lines = []
for i in range(1000):
output_lines.append(str(i))
print("\n".join(output_lines)) # 一次性输出所有结果
关键:避免在循环中频繁调用print(),尤其数据量 > 10⁴ 时 。
四、高频踩坑与解决方案
- presentation error (pe)
- 原因:多输出空格/换行(如
print(a, end=" ")末尾多空格) - 解决:用
join替代手动添加分隔符,确保行末无多余空格 。
- 原因:多输出空格/换行(如
- 未处理多组数据导致提前退出
- 错误代码:仅用
input()读单组数据 - 正确方案:始终用
for line in sys.stdin或try-except循环 。
- 错误代码:仅用
- 大数据量超时
- 优化点:
- 输入改用
sys.stdin.read()一次性读取再拆分(比逐行input()快30%) - 输出改用列表收集后统一打印 。
- 输入改用
- 优化点:
- 数据类型转换遗漏
- 错误:
input()返回字符串,未转整型直接计算 - 检查:
arr = list(map(int, input().split()))确保转换到位 。
- 错误:
五、综合示例:a+b problem(大厂高频题)
题目:多组测试,每行两个整数,输出和 。
import sys
def solve(a, b):
return a + b
if __name__ == '__main__':
output_lines = []
for line in sys.stdin:
if not line.strip(): # 跳过空行
continue
a, b = map(int, line.split())
output_lines.append(str(solve(a, b)))
print("\n".join(output_lines))六、备考建议
- 模板化训练:将上述输入场景整理为代码片段库,笔试时快速复用。
- 调试技巧:
- 本地测试时用
ctrl+d(linux/mac)或ctrl+z(windows)模拟eof终止输入。 - 使用文件重定向测试:
python script.py < input.txt > output.txt。
- 本地测试时用
acm模式下,输入输出处理占30%时间,但错误率高达60%。掌握模板化编写与边界检查,可避免“算法正确却得0分”的尴尬。关键口诀:
- 输入:先分后转(
split()+map())、eof循环、sys.stdin加速- 输出:
join统一、格式校对、批量打印
到此这篇关于acm模式python处理输入输出的操作方法(避坑指南)的文章就介绍到这了,更多相关 python acm模式输入输出内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论