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

Codeforces1445A题Python报错Not enough values to unpack如何解决

给定两个各包含n个正整数的数组a和b,以及一个整数x。请判断是否可以重排数组b的元素,使得对每个i(1≤i≤n)都满足a_i + b_i ≤x。

本题为Codeforces 1445A题目,测试用例之间以空行分隔

输入样例

4
3 4
1 2 3
1 1 2

2 6
1 4
2 5

4 4
1 2 3 4
1 2 3 4

1 5
5
5

输出样例

Yes
Yes
No
No

问题描述

编写的Python代码手动输入测试时运行正常,提交到Codeforces后报运行时错误Not enough values to unpack,原代码如下:

import sys

def get_list():
    return list(map(int, sys.stdin.readline().strip().split()))

def get_ints():
    return map(int, sys.stdin.readline().strip().split())

tests = int(input())
while tests != 0:
    size, limit = [int(x) for x in input().split()]
    p = get_list()
    q = get_list()
    for i in range(size):
        if p[i] + q[size-i-1] > limit:
            print("No")
            break
    else:
        print("Yes")
    tests = tests - 1
问题原因
  1. 未处理测试用例之间的空行:题目明确测试用例之间以空行分隔,代码遇到空行时,split()会返回空列表,执行size, limit = ...赋值操作时没有足够的值解包,直接抛出错误。
  2. 输入读取方式混用:代码同时使用input()和sys.stdin.readline()两种输入读取方法,不同环境下输入缓冲区的处理逻辑存在差异,可能导致读取到空内容。
  3. 解题逻辑缺失排序步骤:本题的标准贪心解法需要先将数组a升序排序、数组b降序排序再配对校验,原代码没有做排序操作,即使输入问题修复也无法通过测试用例。
修复方案

统一使用sys.stdin.readline()读取输入,新增空行过滤逻辑,同时补充数组排序步骤,修复后的代码如下:

import sys

def read_non_empty_line():
    while True:
        line = sys.stdin.readline()
        if not line:
            return ''
        stripped = line.strip()
        if stripped:
            return stripped

def get_list():
    return list(map(int, read_non_empty_line().split()))

tests = int(read_non_empty_line())
for _ in range(tests):
    size, limit = map(int, read_non_empty_line().split())
    a = get_list()
    b = get_list()
    # 排序:a升序,b降序
    a.sort()
    b.sort(reverse=True)
    valid = True
    for ai, bi in zip(a, b):
        if ai + bi > limit:
            valid = False
            break
    print("Yes" if valid else "No")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:54:02