乔明达IOI2013参赛总结2013-07-25 10:00:00阅读量:20856

 
 

我今年非常荣幸地参加了在澳大利亚昆士兰大学举行的IOI2013。
IOI2013的比赛规则和2010~2012这三届比赛是比较相似的。每道题目分为若干个subtask,对于每个subtask,只有通过了其中所有的测试数据才能得到相应的分数。规则与去年相比,有两个明显的变化。一是提交次数的限制变得更加宽松,每道题目最多可以提交100次,每两次提交之间只需间隔1分钟。二是每次提交会测试所有subtask的数据,这意味着如果写了一个朴素的算法,它仍然会在最大数据上运行。这两个变动都对后来的比赛产生了巨大的影响。第一试中的wombats总共有大约100个测试数据,每个数据的时限是20秒。在比赛时,很多人提交的朴素算法需要运行很长时间,这导致比赛后半段提交的程序过了一个小时才能得知分数。
第一试时,我花了大约两个半小时做出了两道传统题。在剩下的artclass那一题中,我使用了一个有严重问题的算法,虽然测试样例时我的程序的正确率很高,但是我第一次提交的程序只得到了32分。在那之后,由于评测机测试速度很慢,我无法针对提交的结果调整参数。我在比赛时并没有发现算法的错误,只是随机地修改了程序中的参数,并尽可能多地在比赛结束前提交程序。比赛结束时,我看到的artclass的提交结果中,最高分只有40分。但令我非常惊讶的是,artclass那题我最终得到了87分。
第二试的题目中,cave是简单的交互题,robots和game是较难的传统题。一开始,我先写了传统题的大部分subtask,robots和game分别得到了90分和80分。之后,我才发现cave其实非常简单,很快就得到了100分。在得到270分之后的比赛过程中,我的策略出现了失误。一个失误是因为我不擅长数据结构,所以我选择先做robots剩下的10分。考试结束后我才发现,game的满分做法是应该比robots更容易想出的。另一个失误就是我陷在了robots的网络流做法中。从数据规模就能推测出,robots的标准解法不可能是网络流。但是,网络流在最后10分的多数测试数据中运行的速度是比较快的,所以我当时希望能够加一些常数优化得到最后10分,结果浪费了比赛的后半段。
这次比赛中,artclass和wombats两道题可以反映出中国选手与外国选手的不同特点。artclass并没有考察经典的算法,需要选手在考场上设计出新的算法,这道题目有很多外国选手得到了满分,但是我们四人中只有一人得到了满分。wombats则是考察了线段树以及决策单调性优化这两个知识点,这些都是中国选手非常熟悉的。参加比赛的300人中只有3人做出了这道题,都是中国队的选手。
在为期七天的活动中,我们与其他国家的选手进行了一些交流。每天晚上,我们经常走出房间和其他选手在走廊里聊天。住在我们边上的是芬兰队,芬兰因为经济危机无法派出四名选手,因此芬兰队只有三名队员。听芬兰的选手说,他们国家的计算机竞赛中几乎全部是提交答案题。澳大利亚国家队选拔主要有两试,第一试的规则类似中国国内的竞赛,而第二试的规则类似今年的IOI(也就是能在比赛时得知自己的分数)。美国队和加拿大队的选手大部分都是华人。IOI最后两天的晚上,我们一起进行了一系列的活动。我们在宿舍地下室的健身房里举行了乒乓球比赛。我们还一起玩纸牌游戏,美国队的选手非常擅长玩“24点”的加强版:用6张牌算163,或者用8张牌算某个四位数,甚至用10张牌算某个五位数。美国队的Scott Wu有时只需要不到十秒就能报出答案。
和往年一样,每个国家的参赛队伍都有一名guide,今年中国队的guide是来自武汉的Mya Wu。IOI活动过程中,她一直负责带领我们去比赛场馆和其他活动的集合地点。空闲的时候,她还带着我们参观校园,去商店买纪念品或者去学校里的邮局寄明信片。清华1997级的黄兹前辈在昆士兰大学任教,比赛期间她多次请我们吃饭。在比赛期间我不小心感冒了,同行的各位老师都很关心我,我的指导老师李老师还特意赶到我住的地方送来热水。真心地感谢所有在IOI2013期间帮助过我的人!
在此次比赛中,虽然难免有一些失误和遗憾,但是国家队的三位队友与我最终都取得了不错的成绩。更重要的是,我通过这次比赛认识了其他国家与我有着相同爱好的人。我相信,将来在计算机科学的道路上,我与他们一定会成为伙伴。IOI有可能成为我计算机竞赛的结尾,但它同时也是我学习计算机科学的新的起点。此次参加IOI2013将会成为我一生不会忘记的经历!