HEZOJ 管理员使用指南
本教程面向零基础新手管理员,争取按照本教程指令,任何人都可以成功传题。
欢迎提出建议,欢迎各位后代管理员修改增删本文。
开始使用
ssh
忘记了,咕咕咕。
Python
需要先把 Python 升级到最高版本,不然后面的操作可能出问题。
可以到 anaconda 下载 MiniConda。下载下来后,直接运行那个 .sh 文件(需要先 chmod +x)。然后你已经装好了。
这时主目录下会有一个 miniconda3 这样的东西。然后你在主目录里 vim .bashrc,加入这一行
export PATH="/home/your-computer-name/miniconda3/bin/:$PATH"
然后就可以使用 conda init 初始化,它会帮你把事情做好。
此时你新开一个终端,使用 conda activate,开头应该会跳出来一个 (base) ... 的东西,那已经对了。
检查的话可用 pip --version,如果版本够的话就可以了。
如果你觉得这个平时用不到,就可以用 conda config --set auto_activate_base false 把它关掉。重启终端即可。
要用的话就 conda activate。
LemonParser
先建一个你喜欢的文件夹,比如 lemonparser,用 git clone https://github.com/Xiaohuba/LemonParser.git lemonparser 把 lemonparser 下下来。
把 requirement 里面的的东西先下载了。比如下载 pdf2image 用 pip install pdf2image。但是更正确的方法是 pip install -r requirements.txt,如果你 Python 版本不够可能出问题,此时按照上面说的下 Python 就可以了。
OpenAI 的话,文件里边有一个隐藏文件,ls -a 即可显示,叫做 env.example,把里边的东西改成你的 API 即可。但是这个东西是一个 example,就是说它其实没用,你要搞一个真的 .env,内容和这个一样。
Linux 系统可能给你报一些奇怪的错,比如

可以改成 pip install --break-system-packages --user -r requirements.txt 强制安装解决。
传题
HEZOJ 大致方法
首先建一个文件夹 data,然后把 solution.pdf, cdf 和数据、down 放在这个目录下面。注意题面必须叫 statement.pdf,题解必须叫 solution.pdf.
目录结构应该是这样的:
~/hezoj/data$ ls
data down lap.cdf solution.pdf
data 和 down 里边,要采用 HEZ 格式,每个题分别子文件夹,例如
data
|
|--- apple
|
|--- game
|
|--- coach
千万不要 down 里套 down!
然后运行 main.py,参数要加全:
python3 main.py -D -E -Z --noip-checker path/to/data
加上的参数是一些帮你干事的操作:自动提取 down,提取题解,自动生成压缩包,使用 NOIP 评测 checker。
然后 OJ 上新建题目,手动加上题目名称和 tag,进入数据页面,点上传数据,选择 .zip 文件上传。然后记得检验配置并更新数据。最后公开题目就可以了。
Trouble Shooting(OJ)
cdf 有问题
不同学校使用的 Lemon 和 cdf 格式都不太一样。比如
- HSEFZ 每个题都有 checker,但是其实很多题是传统题,不用 checker,data 里也没 checker 文件。此时在 cdf 里搜索
specialJudge,把后面那个引号里的东西删掉即可。
人家 solution 分 3 份写?
把 -Z -E 关掉,生成 to_uoj 后手动把 solution.pdf 放进去,并在 problem.conf 里按照 ttx 博客 的流程修改。
题解站传题方法
首先如果你改了 DNS 还是连不上题解站,可以尝试把网断了重新连接。
文件格式和结构是一样的。
使用这些选项:
python3 main.py --parse-pdf --statement-format json -S ../data
切 pdf 是一样的,difficulty 是这样的:
-
\(0\) 是暂无评定
-
\([1, 7]\) 是洛谷难度
-
\(8\) 是难以战胜,银牌题
-
\(9\) 是无法战胜,金牌题
想偷懒可以一路 enter 这个选项。implementation 这个应该也可以偷懒。public 最好设成 y。
这时你的 to_uoj 里应该有一堆 .json,一题一题传。
传到题解站上,要使用这个指令:
curl https://sol.internal.moeebius.top/problems/new/edit -H "Cookie: token=your-token" --data-binary @problem-name.json -H "Content-Type: application/json"
把 problem-name 换成题目名字,your-token 换成你的叫 token 的 cookie。举个例子,题目名字叫做 assign,你的 token 是 EZOI2025,那你应该用
curl https://sol.internal.moeebius.top/problems/new/edit -H "Cookie: token=EZOI2025" --data-binary @assign.json -H "Content-Type: application/json"
Trouble Shooting(Solution site)
不好我把题传了好多遍
千万不要手动删除!这样会永久丢失题号!
采用覆盖的方法。就是你把指令里的 new 变成要覆盖的题号,重新上传即可覆盖!
创建比赛
先点创建比赛,然后选择时间。
先把题传了,然后把题加进去。
设置比赛为 Unrated。赛制改成 IOI。
修理 OJ 和服务器
FTP 相关
怎么开 FTP 呢?如果它告诉你域在线,那没事了。否则,把 ezoi 的 i 删掉,再把 i 输进去。然后点“应用”,然后再点那个钩子“将域置于在线”(反正大概这个名字),灯会变绿色。

浙公网安备 33010602011771号