GESP C++ 常见问题

GESP 编程题怎么判分?为什么要按测试点评测

编程题按测试点独立判分:判题系统把程序输出与每个测试点的标准输出逐字节比对,通过几个测试点就得到对应比例的分数。页面上的样例只是用来说明题意,只过样例不代表能得分。超时、输出格式不符、边界情况未处理是最常见的三类失分。

覆盖等级:3 级、4 级

本页由本站原创整理,涉及考试范围与政策的部分以 CCF 官方公布为准;本平台不是 GESP 官方平台。

评测是怎么跑的

每道编程题有一组测试点,每个测试点包含一份输入和对应的标准输出。程序运行时从标准输入读数据、向标准输出写结果,系统把实际输出与标准输出逐字节比较,完全一致才算通过。

评测在隔离环境中进行,程序不能联网、不能访问文件系统、有运行时间与内存上限。一个测试点超时或崩溃,只影响该点,其余测试点仍会运行,所以部分通过很常见。

本站每道编程题配置 1 个公开样例和 5 个隐藏测试点,隐藏测试点的输入输出不会下发,这是防止直接打表输出的必要设计。正式考试的评测规则与测试点设置以 CCF 官方说明为准。

三类最常见的失分

输出格式不符:多打了一个空格、少了一个换行、把「Yes」写成「YES」。这类错误在逐字节比对下必然判错,写完程序要严格按题目给的输出格式核对。

边界未处理:数据范围的最小值、单个元素、全相同数据、无解情况。题目里的数据范围不是装饰,它提示了需要特判的边界。

超时:算法复杂度超过了数据范围允许的量级,或者循环条件写错导致死循环。先估算运算次数,再决定用几层循环。

按测试点思维写程序

动笔前先写下三件事:输入是什么、输出是什么、数据范围多大。写完先用样例验证,再自己想两组极端数据手算正确答案,最后检查输出格式。这个顺序能避免大部分「思路对但不得分」的情况。

如果时间不够,优先保证第一道题完整通过,而不是两道题都只过样例——按测试点计分时,一道完整通过的题通常比两道半成品得分更高。

相关追问

为什么隐藏测试点不能公开?

公开后可以直接把答案预先写死在程序里,评测就失去了检验能力。隐藏测试点只用于判分,题面、样例与数据范围仍然完整公开,足够用来练习。

程序里可以输出调试信息吗?

不要。调试信息会混进标准输出,导致逐字节比对失败。需要调试时把信息输出到标准错误,或者本地调试完再删掉。

READY TO START

用一套诊断验证

上面的判断都要落到真实作答上:先做一套对应等级的基础诊断卷,报告会按知识点指出缺口,再决定补哪一块。

官方依据