XOR EQUALITY CodeChef 2021年5月赛 Python代码TLE超时排查
超时原因与修复方案
你推导的答案公式本身符合题目要求,超时完全是代码实现的效率问题,具体原因有两点:
- 大数幂运算逻辑不合理
写法2 ** n % MOD会先完整计算无取模的全量大整数,再执行取模操作。本题n的上限可达10^9量级,最终生成的超大整数会占用数百MB内存,运算、存储的开销都极高,是触发超时的核心原因。
Python内置了三参数版本的pow(底数, 指数, 模数),底层基于快速幂实现,运算过程中每一步都会自动取模,不会生成完整的超大整数,时间复杂度仅为O(log n),是大数模幂场景的标准实现。 - 逐行读写的IO开销过高
当测试用例数量较大时,多次调用input()读入、多次调用print()输出都会产生不必要的IO消耗。编程竞赛中Python代码通常会一次性读取全部输入,拼接完所有结果后再批量输出,进一步压缩耗时。
另外你代码里的count = 0是完全无用的冗余变量,可以直接删除。
可直接提交的优化代码
import sys MOD = 10**9 + 7 # 一次性读取全部输入数据 input_data = list(map(int, sys.stdin.buffer.read().split())) case_count = input_data[0] output = [] for idx in range(1, case_count + 1): n = input_data[idx] - 1 output.append(str(pow(2, n, MOD))) # 批量输出所有结果 print('\n'.join(output))
即使不做批量IO优化,仅将原有代码中的(2**n)%((10**9)+7)替换为三参数pow写法,也能解决核心的超时问题,批量读写是适配极限数据的竞赛常用优化。
内容的提问来源于stack exchange,提问作者Anurag Chaudhary
相关产品推荐
相关产品推荐

