帮助

每个用户可以创建自己的域。比如,老师可以为课程创建一个域,然后把题目和学生加入到此域中。再如,可以把域作为团队功能。

通过合理的设置角色及其权限,可以把域设为公开或私有。

默认域为后山OJ,用户直接访问后山OJ域名就会访问此域,点击后山OJ Logo会从任意域跳转回后山OJ域。

每个域的题库、讨论、训练以及比赛是独立且自治的。

编译器版本及参数

后山OJ使用jd4进行评测,以docker镜像的形式安装至评测机。所使用的编译器均为创建镜像时debian testing分支的最新版。编译参数如下:

  • Free Pascal
    fpc -O2 -o/out/foo /in/foo.pas
  • C
    gcc -O2 -Wall -std=c99 -o /out/foo /in/foo.c -lm
  • C++
    g++ -O2 -Wall -std=c++11 -o /out/foo /in/foo.cc -lm
  • Java
    javac Main.java
  • Python
    python foo.py
  • Python 3
    python3 foo.py
  • PHP
    php foo.php
  • Rust
    rustc -O -o /out/foo /in/foo.rs
  • Haskell
    ghc -O -outputdir /tmp -o /out/foo /in/foo.hs

限制

后山OJ 评测机使用进程的CPU时间计算时间消耗,时间的限定为题目中评测点所指定的时间。

后山OJ 评测机使用进程虚拟内存与物理内存总和计算内存空间消耗。内存空间默认限定为256MiB,题目中特别指明的,限定为题目中评测点所指定的内存空间。

输入输出

后山OJ 支持且仅支持标准输入输出(控制台输入输出,屏幕输入输出,STD I/O),不支持文件输入输出。

评测状态

  • Waiting 评测:评测请求正在等待被评测机抓取
  • Fetched 评测:评测请求已被评测机抓取,正在准备开始评测
  • Compiling 评测:正在编译中
  • Judging 评测:编译成功,正在评测中
  • Accepted 通过:程序输出完全正确
  • Wrong Answer 不通过:程序输出与标准答案不一致(不包括行末空格以及文件末空行)
  • Time Exceeded 不通过:程序运行时间超过了题目限制
  • Memory Exceeded 不通过:程序运行内存空间超过了题目限制
  • Runtime Error 不通过:程序运行时错误(如数组越界、被零除、运算溢出、栈溢出、无效指针等)
  • Compile Error 不通过:编译失败
  • System Error 错误:系统错误(如果您遇到此问题,请及时在讨论区进行反馈)
  • Canceled 其他:评测被取消
  • Unknown Error 其他:未知错误
  • Ignored 其他:被忽略
有“成绩取消”字样则说明管理员手动标记此记录为取消,可能违反了服务条款,比如代码被发现与其他用户的代码十分相似。

编译错误

可能有以下情况:

  • 1. 递交时选错了编程语言
  • 2. Java 的主类名没有使用 "Main"
  • 3. 对于 C/C++:见下
  • 4. 一般性的编译错误

对 C/C++ 选手的特别提醒:

  • 1. __int64 在 GNU C++ 中应写成 long long 类型
  • 2. main() 返回值必须定义为 int ,而不是 void
  • 3. for 语句中的指标变量 i 将会在如"for (int i = 0...) {...}"语句之后变为无效
  • 4. itoa 不是一个通用 ANSI 函数(标准 C/C++ 中无此函数)
  • 5. printf 中使用 %lf 格式是不正确的

训练

我们精心挑选了一些题目组成了训练计划。单击导航栏的“训练”即可进入!

比赛

按照赛制不同,有不同的递交、排名规则。

OI 赛制所有题目均以最后一次递交为准,特别地,请避免编译错误。

OI 赛制排名规则为:总分高的排在前面,总分相等则排名相同。

ACM/ICPC 赛制所有题目递交后立即评测,以是否通过为准。

ACM/ICPC 赛制排名规则为:通过题目数多的排在前面,通过题目数相同的做题耗时(含罚时)少的排在前。

时间与空间限制以题目说明为准,默认限制参见限制

通过率

通过率的影响极其恶劣,现在 后山OJ 不提供也不承认通过率。

RP 算法

后山OJ RP 分为固定 RP 与浮动 RP ,固定 RP 可由活动、比赛等的奖励获得,浮动 RP 由一般性通过题目获得。

浮动 RP 是一个动态的数值,每个用户在每道题上获得的 RP 都不一样,并且未来也不固定(即浮动之意)。

每道题的浮动 RP 由该题通过总人数与该用户通过此题的名次计算得来。

难度算法

后山OJ 中题目的难度,根据递交数、通过率以及每个递交的递交时间和评测结果,通过算法计算得出。

因此,请注意以下几点:

  • 0. 一般地,难度的数值越大,该题目越难。
  • 1. 新题目的难度可能不准确;在题目获得大量递交之后,难度才会变得较为准确。
  • 2. 越早递交评测的用户代码的评测结果对题目难度影响越大。
  • 3. 题目的难度由算法计算得出,有可能出现不准确的结果。

测试数据集格式

这里的格式为旧版本Legacy格式,新版配置可使用传统OJ的数据集结构 (所有文件均直接放在数据集根目录)且不强制要求建立文件夹,或者更方便地配置 Special Judge。若需要查看详细信息,请前往Special Judge章节查看详情。

我们只接受后缀名为zip的数据集上传,必须包含以下内容:

  • - Config.ini: 题目配置文件
  • + Input (目录): 放置所有标准测试输入文件
  • |- input0.txt
  • |- input1.txt
  • |- ...
  • + Output (目录): 放置所有标准测试输出文件
  • |- output0.txt
  • |- output1.txt
  • |- ...

Config.ini格式

第一行包含一个整数n,表示总共有n组数据(即Input目录中文件总数等于Output目录中文件总数等于n);

接下来n行,第k行代表第k个测试点,格式为:

[输入文件名]|[输出文件名]|[时限(单位为秒)]|[得分]|[内存限制(单位为KiB)]

其中,输入和输出文件名为 Input 或者 Output 目录中的文件名(不包含Input或者Output目录),且所有数据点得分之和必须为100,如:
input0.txt|output0.txt|1|10|

Special Judge

有时候,题目的正确答案不止一个,或者要根据某些规格对用户提交的答案给出单点的部分分, 这时候就可以使用新版的配置文件以启用Special Judge功能。即使题目不需要Special Judge, 我们也建议您使用新版配置文件以更有条理地管理您的数据。
(其实新版本Vijos也是支持此 格式的,只是Vijos并没有明显地指出而已)

配置文件格式

Vijos的开发组其实已经添加了yaml配置文件格式以更灵活地支持Special Judge:

cases:                 # 首行必备
- time: 1s             # 这是一组SPJ格式的测试数据
  input: case0.in
  judge: judge.c
- time: 1s             # 这是一组普通格式的测试数据
  memory: 32m
  input: case1.in
  output: case1.out
  score: 10
    # 当然可以重复上述的一种或两种

数据集格式

同普通情况下的数据集,我们只接受后缀名为zip的数据集上传,包含以下内容:

  • - config.yaml: 题目配置文件(必需)
  • - case0.in: 标准测试输入文件(文件名取决于配置文件)
  • - case1.in
  • - ...
  • - judge.c: spj测试程序(文件名取决于配置文件)
  • - case1.out: 标准测试输出文件(文件名取决于配置文件)
  • - ...

SPJ测试程序

对于SPJ测试程序,通过标准输入获得用户输出,通过fdopen(3,"r")获得输入数据。

然后SPJ测试程序通过标准输出输出一行"(status状态) (score分数)"返回评测结果。

status状态整数常量可以取以下三值之一:

STATUS_ACCEPTED = 1
STATUS_WRONG_ANSWER = 2
STATUS_SYSTEM_ERROR = 8

SPJ测试程序支持所有 后山OJ 支持评测的语言(只要能实现与fdopen等效的功能的皆可),通过后缀名自动编译。 不过请注意以下几点:

  1. C++的SPJ程序的后缀名为“*.cc”,Python3的SPJ程序的后缀名为“*.py3”,否则评测机可能识别出错。
  2. 如果评测记录结果为SYSTEM ERROR且可以看到每一个点都出现了该错误,可能是因为两种情况:Special Judge程序编译错误,或者Special Judge程序主动输出。

忘记密码和/或用户名

如果您无法登录,请仔细想想,是不是用户名记错了。比如,自己原本想要注册的用户名已经被注册,所以使用了一个带有前和/或后缀的用户名。

如果您确信您的账号被盗或者忘记了账号和/或密码,请及时重置密码或找回用户名