在使用 ACM 模式(即 ACM International Collegiate Programming Contest 模式)编写代码时,需要自己处理输入输出,不能依赖本地调试时的简化方式。下面是 Python3 在 ACM 模式中常见的输入输出写法,适用于在线判题系统(如牛客网、LeetCode(部分)、Codeforces 等)。
✅ 基本原则
- 读取输入必须使用
input()
- 多组输入时,要根据题目要求循环读取
- 输出使用
print()
- 不要输出任何多余内容(如提示语
"请输入..."
)
📌 常见输入场景及写法
1. 单行输入:一个整数或多个整数
# 输入一个整数
n = int(input())# 输入一行多个整数,空格分隔
a, b = map(int, input().split())
arr = list(map(int, input().split()))
2. 多行输入:每行一个值或多个值
# 先输入行数 n,再输入 n 行数据
n = int(input())
for _ in range(n):x = int(input()) # 或者a, b = map(int, input().split())
3. 多组输入(直到 EOF 结束)——常见于 ACM 题目
import sys# 方法一:使用 try-except 捕获 EOF
while True:try:a, b = map(int, input().split())# 处理逻辑print(a + b)except EOFError:break# 方法二:读取所有行(适合批量处理)
for line in sys.stdin:a, b = map(int, line.split())print(a + b)
⚠️ 注意:
sys.stdin
方式在某些 OJ 上更稳定,尤其是输入量大时。
4. 输入二维数组 / 矩阵
n, m = map(int, input().split()) # n 行 m 列
matrix = []
for _ in range(n):row = list(map(int, input().split()))matrix.append(row)
5. 输入字符串
s = input().strip()
# 多个字符串
words = input().split()
🧩 典型模板(ACM 模式通用)
import sysdef main():# 可根据题目选择是否循环while True:try:# 读取输入line = input().strip()if not line:breaka, b = map(int, line.split())# 处理逻辑result = a + b# 输出结果print(result)except EOFError:breakif __name__ == '__main__':main()
🧪 示例:A+B Problem(ACM 模式)
题目描述:
输入多组 a 和 b,每行两个整数,输出 a+b,直到文件结束。
import sysfor line in sys.stdin:a, b = map(int, line.split())print(a + b)
或者:
while True:try:a, b = map(int, input().split())print(a + b)except EOFError:break
✅ 小贴士
- 使用
strip()
可以去除首尾空白字符 input()
默认读取一整行- 大量输入时,
sys.stdin
比input()
快 - 输出后是否需要
flush
一般不需要(OJ 会自动处理)
如果你有具体的题目类型(如树、图、字符串处理等),我可以给出对应的 ACM 输入模板。欢迎继续提问!