Self Evaluation.zh CN - houyhlouis/LLMOJ GitHub Wiki

NOI / OI 比赛自测(Self Eval)

简体中文 | English | Wiki 首页

自测让选手在比赛中用一小组隐藏的预测试数据检验自己的代码。它只用于 NOI / OI 赛制的比赛,且需要比赛管理员开启,默认关闭。IOI、严格 IOI、ICPC 比赛、普通题目页和提交记录页都没有自测。

比赛期间,打开比赛中的题目,点击 自测,填写代码,选择比赛允许的语言和编译选项,点击 运行 Self Eval。结果只显示状态、得分、子任务得分、时间和内存:预测试的输入、答案、程序输出、编译信息和 checker 信息都不会显示。自测不是正式提交,不会改变正式成绩、通过数和排行榜。NOI / OI 的正式成绩仍按赛制在比赛中隐藏。

开启自测

  1. 编辑比赛,选择 NOI / OI 赛制,勾选 开启 Self Eval,设置每位选手全场最多自测次数,然后保存。默认每位选手全场 30 次,所有题目共用,可设为 1~1000 次。
  2. 把传统题加入比赛,从比赛中打开该题,点击 自测,找到 配置 Self Eval。
  3. 填写生成当前正式测试数据所用的 make.cpp(数据生成器)和 std.cpp(标准程序)。两者按 C++17 编译,每份最多 1 MiB。
  4. 核对子任务 ID。如果 std.cpp 读写文件,勾选 std.cpp 使用文件输入输出 并填写文件名。
  5. 勾选确认这些程序生成了当前的正式数据,然后点击 保存 make.cpp / std.cpp。
  6. 点击 准备预测试数据,刷新直到状态变为 Ready。

第 5、6 步必须在比赛开始前完成。

配置自测需要比赛管理、题目修改和测试数据编辑权限。选手需要参加比赛、提交该题和运行自测的权限。比赛、题目和团队原有的访问规则仍然有效。

保存的程序会作为固定版本保存。预测试直接使用题目自己的 checker 或 SPJ,不需要另外配置。如果 AI 生成数据时为题目绑定了输入校验器,预测试也会使用它。

make.cpp 通过命令行参数和标准输入的一行同时收到 subtaskId seed,输出一份完整的测试输入。std.cpp 读取这份输入并输出标准答案。每场比赛中的每道题只生成一套预测试数据,所有选手相同。

用 AI 生成程序

配置 Self Eval 中还有 AI 生成正式数据与 Self Eval 程序 按钮。它需要 AI 使用和数据生成权限、已配置的 AI 服务以及可用的评测机。它运行通常的正式数据生成流程,会替换题目的正式测试数据,并保存配套的 make.cpp、std.cpp 和校验器。

完成后,生成的程序会显示在配置区,再点击 准备预测试数据 即可。在普通题目编辑页生成正式数据,也会保存这些程序供之后的 NOI / OI 比赛使用,但不会给题库开放自测。

限制

  • 默认每位选手全场 30 次,所有题目共用,不按天重置。
  • 只能在比赛进行期间运行。运行一旦开始就计一次,无论结果如何,包括编译错误、答案错误、超时和评测错误。
  • 因参数无效、权限不足、数据未就绪或准备失败而被拒绝的运行不计次数。
  • 每个账号最多同时有 3 次等待评测的运行,同时发出的请求也不能超过次数限制。
  • 每套数据最多 20 个子任务,每个配置的子任务生成 1 组数据。每份输入和答案最多 4 MiB,整套数据最多 16 MiB。

这些限制是 LLMOJ 的设置,并不代表某项 NOI 赛事的规则。自测通过不保证正式评测满分。

修改题目的评测设置或已保存的程序,会使已准备的数据失效。选手在某场比赛中用过的数据不能再在该比赛中替换,以保证所有人用同样的数据测试。比赛开始后不能再配置或准备数据。