评测是怎么跑的
每道编程题有一组测试点,每个测试点包含一份输入和对应的标准输出。程序运行时从标准输入读数据、向标准输出写结果,系统把实际输出与标准输出逐字节比较,完全一致才算通过。
评测在隔离环境中进行,程序不能联网、不能访问文件系统、有运行时间与内存上限。一个测试点超时或崩溃,只影响该点,其余测试点仍会运行,所以部分通过很常见。
本站每道编程题配置 1 个公开样例和 5 个隐藏测试点,隐藏测试点的输入输出不会下发,这是防止直接打表输出的必要设计。正式考试的评测规则与测试点设置以 CCF 官方说明为准。
三类最常见的失分
输出格式不符:多打了一个空格、少了一个换行、把「Yes」写成「YES」。这类错误在逐字节比对下必然判错,写完程序要严格按题目给的输出格式核对。
边界未处理:数据范围的最小值、单个元素、全相同数据、无解情况。题目里的数据范围不是装饰,它提示了需要特判的边界。
超时:算法复杂度超过了数据范围允许的量级,或者循环条件写错导致死循环。先估算运算次数,再决定用几层循环。
按测试点思维写程序
动笔前先写下三件事:输入是什么、输出是什么、数据范围多大。写完先用样例验证,再自己想两组极端数据手算正确答案,最后检查输出格式。这个顺序能避免大部分「思路对但不得分」的情况。
如果时间不够,优先保证第一道题完整通过,而不是两道题都只过样例——按测试点计分时,一道完整通过的题通常比两道半成品得分更高。
相关追问
为什么隐藏测试点不能公开?
公开后可以直接把答案预先写死在程序里,评测就失去了检验能力。隐藏测试点只用于判分,题面、样例与数据范围仍然完整公开,足够用来练习。
程序里可以输出调试信息吗?
不要。调试信息会混进标准输出,导致逐字节比对失败。需要调试时把信息输出到标准错误,或者本地调试完再删掉。
READY TO START
用一套诊断验证
上面的判断都要落到真实作答上:先做一套对应等级的基础诊断卷,报告会按知识点指出缺口,再决定补哪一块。
