跳转至

Adv1:特殊题目评测

什么是 Special Judge(SPJ)?

Special Judge(简称 SPJ,特判)是一种自定义评测方式。当题目的标准答案无法用简单的"输出与标准输出完全一致"来判定对错时,需要用 SPJ 脚本来判断用户输出是否正确。

常见场景: - 输出顺序可以不同但内容正确(如集合、浮点数误差、输出格式灵活等) - 多解题目(如输出任意一组可行解) - 需要自定义判分规则(如部分得分、输出合法性等)

SPJ 的作用: - 由管理员上传自定义判题脚本,自动对用户输出和标准输出进行比对,返回通过/未通过或得分。 - 评测时自动调用 SPJ 脚本,替代默认的"逐字符比对"。

与普通评测的区别: - 普通评测:只要输出和标准输出完全一致即通过。 - SPJ 评测:由自定义脚本决定是否通过,可以更灵活地判定正确性。


模块目标

支持多种评测方式,允许题目配置选择评测策略,支持上传/管理 SPJ 脚本。


前置知识要求

技术点 推荐学习内容
评测策略设计 枚举、配置文件
文件上传 FastAPI/Flask 文件上传
安全执行 沙箱、权限校验

任务分解

任务 1:题目配置支持多种评测策略

有些题目只需严格比对输出,有些则需自定义判分逻辑,因此需要支持多种评测模式。你需要让每道题目都能灵活选择不同的评测方式(如 standard、strict、special judge)。

  • 实现要点
  • 在题目的配置文件(如 JSON/YAML 或数据库模型)中新增 judge_mode 字段。
  • judge_mode 字段可选值如:standard(普通比对)、strict(严格空格/换行)、spj(特判脚本)。
  • 前端/后台管理界面需支持设置和显示该字段。

任务 2:SPJ 脚本的上传、管理与权限控制

SPJ 脚本直接影响判题安全和准确性,必须严格管理。你需要允许管理员上传、更新、删除每道题目的 SPJ 脚本。

  • 实现要点
  • 提供 API 或管理界面,支持 SPJ 脚本的上传、替换和删除。
  • 仅允许管理员操作,普通用户无权上传/修改 SPJ。
  • 校验上传脚本的文件类型、内容安全(如禁止危险操作)。
  • 存储脚本时与题目绑定,便于后续调用。

评分细则

功能/接口 分值 评分说明
题目评测策略配置 2 配置文件 judge_mode 字段
SPJ 上传/删除接口 3 路径、权限、安全、异常
小计 5
作者:Haoran Wang