最后时刻的惊喜——07长春比赛经历
我想,标题里的最后时刻有三个含义:这是我和xiaox最后一次比赛;我们在比赛的最后一刻过了一道题;直到颁奖仪式的最后,才知道我们是金奖。
在得知要去长春之后,我们就开始了一些有针对的练习,估计到会有Skywind出的题,所以我们把他在JOJ上出的一些题做了一下,感觉他出题有一个特点,就是题目很强,数据较弱,赛后证明这确实是事实。
出发前几周,我们把能做的热身赛都做了,最差的一次在POJ排到了31名,还是可以接受的成绩。之前我和xiaox都没什么状态,但通过这些比赛,xiaox的状态很快就出来了。我却比较奇怪,应该说是在思想上恢复了状态,可以思考问题了,但编码的时候却老有一些小错误,导致WA不断,不过也不着急,既然xiaox有状态,大不了最后就让他负责写代码吧。(事实证明我确实有先见之明:))
最后两天我们都一起到九教六层的机房做题,把后缀数组搞定了,又温习了一下一些图论的算法,这时候,我才又终于找到1Y的感觉了。
11月2号晚上出发,因为走的比较匆忙,我们进站后几乎是一路狂奔到的车上。上车后不久就熄灯了,躺下和xiaox聊了好久,他问我这次比赛之后还会不会再做题,我说可能会吧,毕竟这一年多以来,做题都已经成了一种习惯了。
在长春的第一天,让我们切实感受到了吉大之大,下午我出去找高中同学,发现几乎每一路公交的线路上都有几个站点和吉大有关,想起了听人说过“吉大里面有个长春市”。
在吉大还遇上了MaYue的一个同学,她的热心帮助让我们少去很多麻烦。
第二天开幕式后,又见到SUN的那几个人,这已经是我第三次见到他们了,估计技术讲座还讲的是以前那些东西吧,正好李老师让我一起去教练会,不用再听第三遍了。
教练会上进行了抽签,我们抽到39号,最后Skywind说这次的题目比较简单,他估计第一的队伍会做出8道题,要想拿金奖至少要5道题,我一想,那估计和北大最近几次热身赛的水平差不多,这种难度的题目也是我们希望看到的。
下午的热身赛做的比较郁闷,总共3道题,我读A,cracker读B,xiaox读C。A题是个纯粹的高精度,直接求N个数的平均数,但是每个数可能达到200位,我一看就不想写,有点嫌麻烦,正好xiaox看了C之后想写一下,于是就让他上去写了。
我和craker开始讨论B,也没什么收获,xiaox的C写完之后是WA,然后我们也看了一下C题,发现描述很差,好多情况都没说明,尝试着改了几处也都是WA,于是我开始上去写A题,但我当时没仔细想,直接写的传统的高精度,把数分为整数部分和小数部分分别存储和操作,写的很麻烦。写到一半的时候,craker推出了B的结论,我一看B的结论很简单,就赶紧把B拍完,但是写的快却把gcd函数的两个参数弄反了,查了好半天才过。然后 craker又想到A题的简化写法,跟我一说,果然好写多了,于是我重写A题,不过比较郁闷的是我代码中又犯了很多低级错误,像整数比较写成字符比较,一段本应放在if语句里面的代码写到外面去了,好不容易把A过掉,我心想看来明天还是让xiaox写代码吧。最后xiaox一直在修改C题,但是到比赛结束也没过,这让他很是郁闷。
当天晚上,我们商量了一下读题的策略,因为Skywind信誓旦旦的说题目简单,所以我们都觉得肯定会有水题,于是打算先把水题找出来,我读前三道,xiaox读中间三道,craker读后三道。
正式比赛当天,李老师说看我有点紧张,特意鼓励了一下我们,我心想怪了,为什么我一紧张别人就能看出来,去年在西安老师也说我紧张。但xiaox 也有点紧张啊,怎么就看不出来呢。
比赛开始后,我们各自读题,我看完A之后第一感觉是这道题我们应该可以过,但不是水题,会花很多时间,于是继续看下去,B和C就更不是水题了,这时xiaox说他想写写F,他给我简单讲了一下F的题意和他的想法,我也没细想,但我和craker也还没找到可写的题,于是他就上去敲了,之后我又继续往下看了几道题,和craker讨论了一下E题,也就是高斯素数那题,记得以前在北大做过类似的题目,但都不记得结论了。
这时候清华第一个过了题,是红色气球,我听craker说了一句“红色,D题”,便开始读D题,两页长的题目相当冗余,我耐着性子读了第一页,完全不知所云,心想和清华不是一个档次的,便改看别的题了。
Xiaox写好F之后,说时间复杂度有点高,我让他详细讲了一下算法,感觉肯定会超时,他又加了一些优化,只考虑最短路中会用到的边,但能不能过却没有把握,他想交的时候,我突然想到重边的问题,觉得还是处理一下重边保险一点,就算错也让它直接第一次就返回超时,要不然如果是超时的代码再带来几次 WA就亏大了,于是多记录了一下节点间的次短路,用来处理重边。提交之后,过了很久才返回WA,但xiaox很快就发现有错误了,改过之后再提交,过了一会还没反应,因为PC^2判题是系统自动判Yes,裁判人工判No的,如果对的话一般会比较快的返回结果,所以我们都以为又错了,我赶紧跟他说没关系,先别想这题了,再看看别的题,我话还没说完,就返回Yes了,我们都很高兴。我扫了一眼场上,我们是第二个破题的队伍。
这时候,我才发现,原来红色气球是A题,不是D题,便跟xiaox说了A题的意思,我的想法是直接枚举所有情况比较判断,因为题目时限是10S,但是枚举之后还要求凸包,这样复杂度就比较高了,我不敢确定能不能过,xiaox却比较肯定,于是又上去敲A题。期间,有几个队把D题过了,我又耐着性子读了D题的题目,发现第一页完全没用,直接看第二页就可以了,如此冗余的题目还真是少见。最后A题交了几次,都没有通过,于是craker上去改成另一种凸包求法,xiaox下来想E题,过了一会他跟我说了一下他对E题的想法,我看他很肯定的样子,也很高兴,干净把craker叫下来,他上去写E,E很快写好,但提交是WA,改了两次也还是WA,这时候E题过的人已经比较多了,我已经有一点着急了。这时候,A题Rejudge了,我们第一次的提交就过了,我们精神为之一振,于是决定让craker继续想E题,我和xiaox选别的题。
因为之前我同时在想3道题,本来想把我的思路都给xiaox讲一遍,但我先讲的是G题,他听我讲完之后,也觉得是动态规划,就直接上去写了。我开始想D题,之前我一直往搜索上想,经xiaox提醒后才开始想动态规划,后来我把D题想的差不多了,动态方程也写好了,甚至整个程序的结构框架都在脑子里过了一遍,一看时间,只有半个多小时了,xiaox的G已经写出来,还没调试通过,但看了一下提交情况,G题还没有人过,D题已经有十几个队过了,于是我叫他写D题,因为有热身赛的教训,我还是不愿意自己去写,就在旁边看着他写,但我之前为了写程序方便,一直想的是记忆化搜索,没有仔细想,等到程序运行不出结果的时候,才想到可能是搜索的时候死循环了。这时候离比赛结束不到10分钟了。赛后我觉得我看着xiaox写代码其实是一个失误,因为我之前把程序的结构什么都想好了,所以只要他写的有点不一样,我就出言提醒,结果写出来的代码其实就等同于我自己写的,如果让他单独写的话,他写的过程中再思考一下,估计能提前想到记忆化搜索陷入死循环的情况。
这时候craker对E题又有想法了,于是他和xiaox讨论,我想碰碰运气,直接强制制止D题的无限循环,但样例都没通过,时间所剩不多,我们都决定改E题吧,但随着一次次提交,一次次WA,我们也越来越失望。
Skywind已经走到场内,开始倒计时了,就在他倒数到4的时候,我们收到了返回的Yes!我们都激动的叫了起来,看台上李老师也很激动。
后来数数气球,3个题以上的队伍大概有20个左右,只能拼罚时了,但我们E题提交了好多次,估计罚时很高,看来可能是银奖了,其实就算我们只有两道题,银奖也是拿定的,因为我们那两道题的罚时很少。
晚上的颁奖仪式,先发的是前15名的ICPC排名证书,我们都期待着能不能进前15,Skywind从第15名开始倒着往前念,一直到第10都没有我们,我感觉好失落,看了看大家也都很失落,谁知道念到第六的时候,竟然是“北京交通大学”,xiaox一下就站起来了,我们也都很激动。接下来发金银铜奖,虽然我们学校是排在第六,但可能有的学校有几只队伍在我们前面,所以能不能拿金奖,还是有点担心,当念到最后一个银奖不是我们的时候,我们都情不自禁的鼓掌了,这让我想起去年上海的时候,念到最后一个银奖的时候,也有一支得金奖的队伍爆发出一阵掌声。
最后我们队伍排名是第八。
总的来说,这次我和xiaox的告别赛,总算是完美谢幕了,拿回了交大的第一个金奖(去年的印度赛区虽是第五,但没有评金银铜奖),赛后平静下来之后,xiaox有点郁郁,我问他怎么了,他说好想再来一年。记得比赛前几天,我一想到这次比赛完,我们就要告别ACM了,心里也会有些伤感,一年多来,ACM对我俩的学习,生活都有很大的影响,想到以后再也用不着做题,参加比赛了,心里还是有点失落。
记得在酒店的时候,李老师让我俩总结一下,为什么我俩大二才接触ACM,用了一年多能有现在的水平。其实我觉得最主要的因素是热情,我们最疯狂的时候,一天不做题就感觉缺了点什么,也就是这份热情,才让我们自学了很多东西,也终于取得了今天的成绩。
颁奖仪式上,黄金雄让做了500道题以上的同学给自己鼓掌,鼓掌的同时,我心想,确实啊,就算这次我们什么奖也没拿,我也有资格给自己鼓掌,一年多来,我们凭着对ACM竞赛的热情,付出了很多时间与精力,至少,我们是在认认真真的做这件事。
最后,祝愿BJTUACMERS再接再厉,早日冲到世界舞台上,展示北交学子风采!