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 |
作者: