ACM模式输入输出2
在使用 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 sys
def main():
# 可根据题目选择是否循环
while True:
try:
# 读取输入
line = input().strip()
if not line:
break
a, b = map(int, line.split())
# 处理逻辑
result = a + b
# 输出结果
print(result)
except EOFError:
break
if __name__ == '__main__':
main()
🧪 示例:A+B Problem(ACM 模式)
题目描述:
输入多组 a 和 b,每行两个整数,输出 a+b,直到文件结束。
import sys
for 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 输入模板。欢迎继续提问!

浙公网安备 33010602011771号