Skip to content

竞赛 ​

当前竞赛模块支持类 Kaggle 分数赛,并通过 SSE 推送实时排名。 ICPC、IOI、OI 等其他赛制尚未开放。

赛制与基本规则 ​

  • 赛制:kaggle(当前唯一支持的赛制)。
  • 每道竞赛题配置一个满分,参赛者在规定时间内提交代码、作答客观题或上传 zip 产物。
  • 每道题只取该参赛者的最高分,所有题目的最高分相加得到总分。
  • 可按题目配置提交次数上限(submission_limits);未配置的题目不限制提交次数, 失败提交也会计入次数。
  • 排名按总分从高到低,同分时按达到最高分的时间排序(较早达到者靠前)。

报名与参赛 ​

公开赛可自助报名,邀请赛需要邀请码:

竞赛分类报名方式是否进入公开列表
public 公开赛登录后自助报名(可设竞赛密码);仅管理员可创建是
invite 邀请赛需提供正确邀请码;可设置否(仅链接 + 邀请码可见)

访问与提交的时机限制

  • 竞赛未开始(pending)时,题目一律不可访问。
  • 竞赛进行期间,题目与提交仅对已报名参赛者开放。
  • 竞赛结束后开放回看:公开赛对所有访客可见,邀请赛的竞赛页仍仅参赛者 / 管理员可见。
  • 管理员不受上述参赛者限制。

公开赛会"收编"题目(2026-09-26)

题目被加入公开赛后,在竞赛结束时间之前,除题目所有者与管理员外,其他人访问这道题 的题库页面与独立接口都会 404(题库列表里仍能看到条目,点进去即 404);竞赛 end_time 一过 自动恢复可见。

  • 题目所有者/管理员打开该题时会看到保密提示横幅,提示"仅管理员和题目所有者可见"。
  • 因此公开赛的题目请通过竞赛入口做题与提交;把题目收藏成 /problems/<编号> 直链在赛前 / 赛中会 404,请改用竞赛题目页链接。
  • 邀请赛不受该规则影响(邀请赛的题目访问本就由参赛者身份与邀请码门控)。

做题人 ​

  • 在「竞赛」页浏览公开竞赛并报名 / 参加。
  • 竞赛期间在竞赛题目页提交代码、作答客观题套卷或上传 zip 产物。
  • 排名页可实时查看排名(实时刷新由 SSE 驱动);竞赛题目是否计入全局统计由竞赛配置决定。
  • 竞赛题目默认不计入全局榜单,除非运营者设置 affect_global_ranking=true。

榜单可见性 ​

竞赛可配置三种榜单可见性(ranking_visibility):

取值说明
public公开可见
participants仅参赛者可查看
hidden完全隐藏

服务端封榜 ​

支持服务端封榜:可配置结束前冻结的窗口(freeze_start_time 或 freeze_duration_seconds,二者只能配置一个)。

封榜期间各角色的视图

  • 普通用户在封榜窗口内读取冻结视图(只反映冻结起点之前的数据),REST、SSE 与页面口径一致。
  • 管理员始终看到实时完整榜。
  • 封榜期间,普通用户的 SSE 也不再推送实时提交事件,避免从旁路推导实时变化。

榜单不是实时成绩

  • 竞赛进行中,普通用户看到的排名不一定是完整公开榜(受榜单可见性与封榜影响)。
  • 竞赛结束后进入待结算状态,需评测清空且管理员发布正式成绩快照后,普通用户才会看到正式榜; 不会自动暴露未完成评测的实时结果。

赛期题解门控与赛后复盘 ​

  • 赛期题解门控:属于「进行中竞赛」的题目,其题解(含他人已发布的)对普通用户整体不可见, 发布入口同时关闭;竞赛结束(到达结束时间)后自动恢复,无需人工干预。 该判定按时间窗口实时计算,不依赖定时任务。审核员与管理员不受限。
  • 赛后复盘:竞赛结束后,竞赛页出现「赛后复盘」标签,可回看题目并进入题目页查阅官方题解。 可读性沿用既有赛后放行规则(参赛者可见)。

运营者 / 管理员 ​

后台「竞赛」页可以:

  • 创建 / 编辑竞赛:标题、时间、题目列表、公开状态、是否计入全局统计和每题提交次数限制。
  • 配置榜单可见性与封榜:设置榜单可见性与结束前封榜时长(或封榜起点)。
  • 结算与发布正式成绩:比赛结束后进入待结算状态,待评测清空且管理员发布正式成绩快照后, 普通用户才会看到正式榜。
  • 管理参赛者。
  • 查看竞赛排名与提交记录。

竞赛相关 API 与排行逻辑见 noj-core 的 src/domains/contest/routes/contests.ts 与 src/domains/contest/services/。

Neuro OJ 是一个独立社区项目,与 CCF、LMCC、IOAI 及 NOAI 无官方关系。