又到了4月,又到了一年一度校赛的时候。

今年的校赛仍然是跟学生会网络部合办,作为学校e文化节的一部分,经过了前段时间的Eming杯比赛的简单测试,我对我写的Olive Judger颇为自信,便决定用它来当这次比赛的评测系统。

校赛的出题工作在3月份就开始了,然后各种脱稿也在这个时候开始了……

网络赛

在3月23号这个星期,网络部的人跟我联系了办校赛的事项,然后丢给我一份策划书,我大概看了一下……这TM不就是去年的策划书么,时间一字未动。

清明节办比赛什么鬼?周一现场赛什么鬼?这怕是只有鬼才能参加吧?

然后很快就把时间改掉了,最后拍板把时间定在了4月8日网络赛,4月16日现场赛。

后来陆神把我拉进了武汉ACM交流群,大概了解到8号很多学校要打蓝桥杯,于是顺手跟网络部的说了一声,就把时间改到了9号。

接着就是网络赛出题,Sagitta丢给了我一道Soul Artist,看了一眼……发现是用前缀和维护的题目,然后就把题目转成了LaTeX的格式,就丢到一边了。

本想着两三天差不多就能够把题目搞齐,然后再来两三天就能把题目验好,这样校赛的时候差不多不让服务器宕机就没啥别的事了……然后后来就是漫长的催稿环节。

男后来也给了我两道题,一道是维护区间历史最小值,另一道是从Megcup里面搞到的idea,我感觉历史最小值好像很简单的样子,就把历史最小值丢到了网络赛里面。

(后来男又想了几题,然后发现不可做……)

陆神给了一道环套外向树的DP,感觉挺可做的也丢到网络赛了……

这时候发现一道签到题都没有,于是找了一道小学奥数来签到。

TQM丢了一道水水的树上DP,虽然我还是怀疑萌新搞不出来。

蛤子敬日常膜,我感觉题目太膜了,就改了一下描述。

蛤牧放倒没有膜,搞了一道矩阵快速幂,我感觉评测机的速度应该很快,所以也没有改数据范围。

后来发现这套题变成纯中档题了,所以又从自己的题库里面搞了一道水题丢进去。

比赛要开始了……

网络赛那天的上午,我怕服务器撑不住,于是加了个Google Analytics,到比赛之前看着……嗯,300个人,CPU占用15%,应该没问题……

吃饭吃得并不早,然后到了十二点二十五的时候,又看了一眼,嗯没问题。

………………………………

十二点半,服务器准时崩

然后看了一下,仍然不知道为什么崩……然后等了大概15分钟,发现服务器撑不住了,就马上开了个镜像给迁移过去了。

迁移服务器的15分钟大概是最漫长的15分钟……

到了一点过五分的时候,迁移好了,然后赶紧把DNS改掉,重启评测机,想了一下,把比赛时间往后面推迟了10分钟。

后来有人说应该推迟30分钟,就又加了20分钟。

接下来两个小时安然无恙,大家愉快地做题、交题

…………………………

三点半左右的时候,服务器负载莫名冲到400%(开了4核的服务器),检查了一圈找不到问题,但是因为出现的概率比较低,刷新两遍基本还是能够正常访问的,就没有多管这个问题,后来发现因为负载高,评测机有点崩,就手动rejudge崩掉的提交。

后来手动rejudge抗不住,直接进了数据库批量rejudge。

…………………………

到了最后半个小时的时候,有人在群里反映D题(区间历史最小值)暴力WA,后来人工跑了一下测试的数据,发现标程写错了,但是考虑到比赛已经快结束了,按照ICPC的惯例就决定在比赛之后Rejudge所有WA的提交。叫他们按照自己想的正确做法去做。

最后曲折地到了晚上6点,比赛结束,就开始忙着去解决D题数据出错的问题,但是实在是太过于紧张,一直没能搞出来。

这时候陆神给了一份他的分块,我用暴力跑了一下发现还是错的……改了一下就没问题了,重新造了数据之后Rejudge掉WA的提交……多过了3个人。

简单整理了一下榜之后把榜传到了群里面,网络赛差不多就结束了,后来讨论了一下准备放80个队进现场赛被虐(原话:网络赛就是个套,现场赛就可以宰杀了……)多放一点本校的就开了100个名额,这时候又发现原来的机房大小不够,紧急找网络部的再要了一个机房。

准备现场赛

现场赛又是一个大坑,因为到现场赛前一周还没有准备几道题目……考虑到网络赛标程写错的问题,我们决定现场赛必须严格验题,对时间又提出了不小的要求。

整理了一下能出的题之后,发现还差好多题,又在出题组里面找他们要题目。

在组合数学课上想了一道伪球面几何,感觉没有计算几何的板子也能做,就丢上去了。

陆神的自动AC机没做出来,于是他又YY了一个自动AC机。

铭铭想出在Camp上学到的黑盒子代数,我们觉得完全不可做就没出。

蛤子敬出了两道题,一道叫Too Young And Too Simple, 另一道叫Young And Simple,我以为是一道题……就只处理了Too Young And Too Simple。

这时候又发现没有签到题,于是找陆神要了签到题……一道是CF的April Fool's Contest,另一道是给一列数问模11的结果。因为做过HNOI2011的数学作业,这两道题马上就验好了……

蛤牧放出了一道树上打标记,然后恶心地卡log

感觉题目不够简单,就把刘沁怡之前的一道DP搞上来了

因为感觉题目还是不够简单,我又YY了一道交互题。

发现题目不够,于是看着sagitta的博客,又yy了一道组合数学题

陆神这时候又丢过来一道Prim的最小生成树……

到这里现场赛的12题已经出好了,交叉验了一下发现差不多还是挺可做的,又发现蛤子敬的题目数据可以卡,就加了一个数据随机的限制。

这个星期我又写了一个OJ的前端UI,自己测了一下发现并发能有400,就放心地部署了。

找室友借了他的i5-6500当现场赛的评测机+服务器,自己测了一下,效率挺高的。

热身赛

热身赛比较随意,差不多就是为了检查一下OJ有没有什么重大的Bug,发现没有多大的问题之后,发现热身赛的数据配错了。

xjb改了一下就发现没有啥大问题。

现场赛

现场赛起得比较早,到机房之后发现还没什么人,就把服务器架起来,数据传上去,给电脑分发Code::Blocks

整个现场赛总的来说还是比较顺利的,虽然中间因为C::B分发的问题很蛋疼。

最后滚了个榜,效果非常好,就是到赞助商的时候没人了……

总结

  1. 试题早准备
  2. 试题要反复验
  3. 预先进行压力测试
  4. 现场赛要提前部署服务器(虽然以后没有这个问题了)
  5. 要让赞助商少讲点东西
  6. 现场赛签到时间要提前