Logo Online Judge

HZOJ

来了?坐,欢迎来到 Online Judge。

小熊像超人一样飞

众所周知,信息学的题目一般形式为:给出XXXXX,要你提交一份源代码,输出XXXXX,然后时限若干秒,内存若干兆,数据若干组,每组数据与答案进行比较,不对就不给分。

看起来挺合理的,但是总是有意外。比如要求输出一个浮点数,与答案接近就满分。于是只好引入Special Judge来判断选手输出的正确性。

但是还是有意外,比如提交两个程序,一个压缩另一个解压;比如提交答案题只用提交文件;比如给出音乐要求识别乐器,达到90%的正确率就算满分……

这个时候UOJ出现了,于是HZOJ就使用了这套系统。Universal的中文意思是通用,之所以称之为UOJ,因为我们所有题目从编译、运行到评分,都可以由出题人自定义。

如果你正在为没有地方测奇奇怪怪的题目而苦恼,那么你来对地方了。

当然了,HZOJ对于传统题的评测也做了特别支持。平时做题时我很难容忍的地方就是数据出水了导致暴力得了好多分甚至过了,而出题人却委屈地说,总共才一百分,卡了这个暴力就不能卡另一个暴力,所以暴力过了就过了吧。

所以我们引入了Extra Tests和Hack机制。每道传统题的数据都分为Tests和Extra Tests,Tests满分100分,如果你通过了所有的Tests,那么就会为你测Extra Tests。如果过了Tests但没过Extra Tests那么倒扣3分变为97分。Extra Tests的来源,一个是这道题没什么人可能会错的边界情况可以放在里面,另一个就是各位平时做题的时候,如果发现错误算法AC了,可以使用hack将其卡掉,HZOJ会自动加入Extra Tests并重测。我们无法阻止暴力高分的脚步,但是不让他得满分还是有心里安慰作用的~

HZOJ还有比赛功能可以承办比赛,赛制暂时只支持OI赛制。(不过你可以利用现有方案变相实现ACM赛制!)未来将支持更多种多样的赛制甚至自定义赛制。

目前HZOJ刚刚起步,还有很多地方有待完善。想出题、想出比赛、发现BUG、发现槽点都可以联系我们,联系方式见下。

祝各位在HZOJ玩得愉快!(求不虐萌萌哒服务器~求不虐萌萌哒测评机~!)

小熊抱抱

默认的测评环境是 Ubuntu Linux 18.04 LTS x64。

C的编译器是 gcc 7.4.0,编译命令:gcc code.c -o code -lm -O2 -DONLINE_JUDGE

C++的编译器是 g++ 7.4.0,编译命令:g++ code.cpp -o code -lm -O2 -DONLINE_JUDGE。如果选择C++11会在编译命令后面添加-std=c++11

Java8的JDK版本是 openjdk 1.8.0_222,编译命令:javac code.java

Java11的JDK版本是 openjdk 11.0.4,编译命令:javac code.java

Pascal的编译器是 fpc 3.0.4,编译命令:fpc code.pas -O2

Python会先编译为优化过的字节码.pyo文件。支持的Python版本分别为Python 2.7和3.6。

  • Accepted: 答案正确。恭喜大佬,您通过了这道题。
  • Wrong Answer: 答案错误。仅仅通过样例数据的测试并不一定是正确答案,一定还有你没想到的地方。
  • Runtime Error: 运行时错误。像非法的内存访问,数组越界,指针漂移,调用禁用的系统函数都可能出现这类问题,请点击评测详情获得输出。
  • Time Limit Exceeded: 时间超限。请检查程序是否有死循环,或者应该有更快的计算方法。
  • Memory Limit Exceeded: 内存超限。数据可能需要压缩,或者您数组开太大了,请检查是否有内存泄露。
  • Output Limit Exceeded: 输出超限。你的输出居然比正确答案长了两倍!
  • Dangerous Syscalls: 危险系统调用,你是不是带了文件,或者使用了某些有意思的system函数?
  • Judgement Failed: 评测失败。可能是评测机抽风了,也可能是服务器正在睡觉;反正不一定是你的锅啦!
  • No Comment: 没有详情。评测机对您的程序无话可说,那么我们也不知道到底发生了什么...

没错就是这样!除非是特殊情况,HZOJ测评程序时的栈大小与该题的空间限制是相等的!

对于这类问题,我们在这里简单列一下可能原因:

  • Linux中换行符是'\n'而windows中是'\r\n'(多一个字符)。有些数据在Windows下生成,而HZOJ评测环境为Linux系统。这种情况在字符串输入中非常常见。
  • 评测系统建立在Linux下,可能由于使用了Linux的保留字而出现CE,但在Windows下正常。
  • Linux对内存的访问控制更为严格,因此在Windows上可能正常运行的无效指针或数组下标访问越界,在评测系统上无法运行。
  • 严重的内存泄露的问题很可能会引起系统的保护模块杀死你的进程。因此,凡是使用malloc(或calloc,realloc,new)分配而得的内存空间,请使用free(或delete)完全释放。
  • 当然数据可能真的有问题。但是如果不止一个人通过了这道题,那最好不要怀疑是数据的锅。反之,可以立即联系我们上报!

HZOJ博客使用的是Markdown。(好吧……好简陋的……好多功能还没写……)

(喂喂喂我们是OJ好吗……要那么完善的博客功能干啥呢……?)

其实我觉得Markdown不用教!一学就会!

(完蛋了……HZOJ好像没有Markdown的语法高亮……= =……)

我就只介绍最基本的功能好了。其它的自己探索吧~

**强调** = 强调


*强调* = 强调


[HZOJ](https://oj.haizeix.com) = HZOJ


https://oj.haizeix.com = https://oj.haizeix.com


![这个文字在图挂了的时候会显示](https://oj.haizeix.com/images/favicon.ico) = 这个文字在图挂了的时候会显示


`rm orz` = rm orz


数学公式萌萌哒$(a + b)^2$萌萌哒 = 数学公式萌萌哒$(a + b)^2$萌萌哒


<!-- readmore --> = 在外面看这篇博客时会到此为止然后显示一个“阅读更多”字样


来个更大的例子:

					```c++
					#include <iostream>
					```

					```c
					#include <stdio.h>
					```

					```pascal
					begin
					```

					```python
					print 'HZOJ'
					```

					\begin{equation}
					\frac{-b + \sqrt{b^2 - 4ac}}{2a}
					\end{equation}

					#一级标题
					##二级标题
					###三级标题
					####四级标题
					

会转换为:

#include <iostream>
#include <stdio.h>
begin
print 'HZOJ'

\begin{equation} \frac{-b + \sqrt{b^2 - 4ac}}{2a} \end{equation}

一级标题

二级标题

三级标题

四级标题


还有一个很重要的事情,就是你很容易以为HZOJ在吃换行……

那是因为跟LaTeX一样,你需要一个空行来分段。你可以粗略地认为两个换行会被替换成一换行。(当然不完全是这样,空行是用来分段的,段落还有间距啊行首空两格啊之类的属性)

唔……就介绍到这里吧。想要更详细的介绍上网搜搜吧~

(评论区是不可以用任何HTML滴~但是数学公式还是没问题滴)

唔……好问题。交互式的题一般给了一个头文件要你include进来,以及一个实现接口的源文件grader。好像大家对多个源文件一起编译还不太熟悉。

对于C++:g++ -o code grader.cpp code.cpp

对于C语言:gcc -o code grader.c code.c

如果你是悲催的电脑盲,实在不会折腾没关系!你可以把grader的文件内容完整地粘贴到你的code的include语句之后,就可以了!

什么你是萌萌哒Pascal选手?一般来说都会给个grader,你需要写一个Pascal单元。这个grader会使用你的单元。所以你只需要把源文件取名为单元名 + .pas,然后:

对于Pascal语言:fpc grader.pas

就可以啦!

如果你想出题、想办比赛、发现了BUG或者对网站有什么建议,可以通过下面的方式联系我们:

  • 私信联系suyelu。
  • 邮件联系suyelu@haizeix.com。