2026年ACM校赛小记
前言
今天举办了2026年的ACM校赛,这也是我第一次负责ACM校赛的经历,在此记录一下。
赛前
首先是出题工作,除了签到题保证所有人都能完成之外,考虑让考点全面一些,总体比较松弛,不过在DDL之前,出题组也算是完成了出题工作,参考正规比赛PDF题面样式,制作好PDF试题册,交付印刷。
出完后对照往年校赛题,我们还在考虑整体会不会有点难了,是否不适合放校赛,不过事已至此,只能这样了。
特别地,经过去年ICPC某赛站的洗礼,我们这次也出了一道名为“构造王国”的构造题。也许是为了顺便测试非传统题,我们又接着出了一道交互题,解析几何题使用SPJ进行精度判定,这也是校赛首创。
为了和ICPC的判题环境保持统一,用的是DOMjudge,直接用学长打下的基础,不需要重新部署环境。
之前出题是在HydroOJ环境上,由于对DOMjudge还不完全熟悉,将交互题迁移到DOMjudge时还出了点小问题,错把交互配置成compare SPJ了。实际上并不应该是对最终输出结果进行compare,应该使用DOMjudge的run Executables功能,构建一个自定义脚本执行交互操作,为了方便,我直接借鉴官方的boolfind_cmp example,让AI把原来基于testlib的交互器代码改成了validate.h版本。
服务器方面还有细节工作,我发现系统时间有点误差,于是额外手动同步了一下,以确保比赛时间的相对准确。
收集报名信息之后,照例为每支队伍分配随机密码,制作Teams和Users数据批量导入DOMjudge。
除此之外,就是气球的事了,按照ACM赛事的传统,通过一道题就应该给对应队伍发一种颜色的气球。虽然去年没有弄气球,但是今年我们打算重启这一流程。清点了气球数量和颜色种类后,我给每道题分配了对应的颜色。我不会告诉你其实最难的那道题并没有准备对应气球,因为预计就是无人通过(
临近比赛,我们人工搬运物资到机房。为了让机房之外不能访问OJ,我在服务器端配置防火墙,结果没注意允许judgehosts的访问,幸好我赛前提前3分钟检查了一下发现judgehosts全都掉线了,临时禁用了防火墙,否则评测就要出事了,也是挺极限的(
赛中
为了固定气球,我们创新性地使用了“纸折气球袋”,再用胶带贴在显示器背面。
其实发气球的过程是挺累的,到场30多支队伍,总计产生了100多个气球,电动充气的声音挺大,我们在另一个机房奋力制作气球,来回运输。

出现了气球堆积了一堆要发的情况,还好我们在比赛的最后十分钟完成了气球队列的清空(真的吗)。
感觉可能还是有点人手不足,据说可以招募校内志愿者,一发志愿时长肯定有人来啊(,明年可以操作一下试试。
不得不说,尽管赛前发布了OJ使用指南,还有人不知道在哪提交/不会提交,如图是把代码交到了Clarifications requests:

出题组在此过程中也发现了题目的一些小问题,不过总体影响不大。
赛后
备份数据库,导出榜单。
仔细想想,事实上赛前有些担心多余了,最终榜单没有想象中那么不堪。甚至还是有一定梯度的,比较适合划奖。

感觉还不错吧。最后来一张机房全景图,展示一下赛场状况:
