Benchmark · coding
LiveCodeBench
LiveCodeBench 评估大型语言模型解决 competitive programming 题目的能力,其题目持续从近期的比赛中收集,以避免训练数据污染。核心指标是 pass@1,即模型第一次尝试就正确解出的题目所占的比例。
了解更多
- 示例
- 一个典型的题目是比赛风格的编程题——例如,给定一个整数数组,编写一个函数返回最长严格递增子序列的长度——模型必须通过生成可运行的代码来解决它。
- 评分方式
- 每个生成的解答都会在该题的测试用例上运行;pass@1 就是模型首次提交即通过全部测试的题目所占的比例。
- 验证方式
- 当生成的代码通过该题所有隐藏和公开的测试用例时,解答会被自动接受;不涉及人工评判或精确文本匹配。
- 为何重要
- 由于其题目取自模型训练截止之后发布的比赛,LiveCodeBench 衡量的是真正的推理和编程能力,而非背下来的答案,因此成为一个可信且抗污染的编程能力衡量标准。
示例解析
任务
竞赛编程风格(stdin/stdout)。给定 n 个整数,统计满足 i < j 且 nums[i] + nums[j] 为偶数的数对 (i, j) 的个数。输入:第一行是 n,第二行是 n 个用空格分隔的整数;输出该个数。
解答
import sys
def main():
data = sys.stdin.read().split()
n = int(data[0])
nums = list(map(int, data[1:1 + n]))
odd = sum(x % 2 for x in nums)
even = n - odd
print(odd * (odd - 1) // 2 + even * (even - 1) // 2)
main()
解析
当且仅当两个加数奇偶性相同时其和为偶数,因此答案为 C(evens, 2) + C(odds, 2);统计奇偶性的复杂度为 O(n)。LiveCodeBench 用隐藏单元测试运行模型的程序并以 pass@1 评分——只有全部测试通过才算正确。