USACO提交报错:输出文件breedflip.out缺失,求解决方法
USACO竞赛输出文件问题解决
你的代码确实没有生成要求的breedflip.out文件,原因是你用print()把结果输出到了控制台,而USACO竞赛要求必须将最终结果写入指定的输出文件(这里是breedflip.out),系统检测不到该文件就会报错。
解决方法:将结果写入输出文件
有两种简单的修改方式,任选其一即可:
方法1:直接打开文件写入结果
把代码最后一行的print(swap_number)替换成以下代码,直接将结果写入breedflip.out:
with open('breedflip.out', 'w') as output_file: output_file.write(f"{swap_number}\n")
with open(...)是Python安全操作文件的方式,会自动处理文件关闭- 要把数字转成字符串写入,这里用f-string格式化,同时加上换行符(USACO通常要求输出末尾有换行)
方法2:重定向标准输出到文件
在代码开头导入sys模块,然后将标准输出重定向到目标文件,这样原来的print()就会自动输出到文件里:
import sys sys.stdout = open('breedflip.out', 'w') # 原来的代码保持不变... print(swap_number)
额外提示:你的代码逻辑可能存在问题
顺便提一句,你计算swap_number的逻辑list[0] + (list[1]-list[0])其实等价于list[1],这可能不符合题目要求的交换次数计算逻辑。比如当需要交替转换H和G时,实际需要的交换次数应该是连续不同段的数量除以2,而不是取两者的最大值。如果后续测试结果不对,可以再检查这部分逻辑。
内容的提问来源于stack exchange,提问作者DDoubleDDarren
相关产品推荐
相关产品推荐

