百度之星2021决赛游记
之前的复赛跌跌撞撞打到了rank23,顺利进入到了决赛,左等右等终于在新年伊始迎来了决赛,虽然仍然是线上。
说来惭愧,参加百度之星决赛的主要初衷,其实是决赛的纪念卫衣——之前广州站的纪念服舒服保暖,让我很是满意,虽然最终纪念卫衣其实是一件薄薄的春秋装。对于决赛本身不同于传统比赛的形式我有所耳闻,但大概还是由于太懒了,我没有什么准备就来到赛场“裸考”。
比赛前夕官方组建了大赛群,让我得以正式认识了参赛选手们。占选手绝大部分的自然是已经在OI中功成名就的竞赛生们,他们有的是往年的国家队选手,有的是已经步入高三/大学的集训队选手。望着那一个个我曾在竞赛时感到遥不可及的名字,或是在如今的竞赛界中仍然响当当的名字,说不感到一点畏惧是不可能的。我会是他们的对手吗?我这样一个无名之辈也能和他们一较高下吗?我突然觉得有点惶恐了,我知道这股面对功成名就的强者的怯懦一直深埋在我的内心,但我也知道,我的内心还有另一种同样强烈的情感——那是一种想要在众人讨论哪些绝顶高手将成为这场游戏的获胜者时,以跳梁小丑的姿态横空出世粉碎他们的预测的飞扬跋扈的决心。
比赛的开头照例是百度的宣传片,也算是为比赛提供了一点仪式感。开题后题目陌生的叙述方式颇带给人一些疑惑,好在经过提问和答疑的环节,我还是大致理解了题意。
上午的2小时比赛共两道题,分别是50和200分。在简短的观察后,我发现了第一题实际上就是简单的高斯消元,于是比较顺利地写了代码通过了此题虽然中间挂了一发。接下来就是令人有些无从下手的第二题了,好在这是一道提交答案题,我写了一些代码开始观察数据的性质。再将行星根据大小初步分类以后,我发现绝大部分行星的出现位置实际上具有周期性,通过kmp得到位置的周期性,我取得了150左右的还不错的分数。
不过随着大家对题目研究的深入,大家的分数也不断上涨,也出现了不少取得满分的选手。我发现自己的问题出在对同样大小的行星区分不够,于是进一步优化了算法,通过位置出现的已知周期性预测最可能的周期。这样,我得到了193分左右的分数。
随后我没有再取得进步,上午的最终成绩我排在rank14。在中午,我从选手的讨论中得知所有行星的周期实际上都是一样的——36,因此只要更简单的代码就可以得到满分了。
经过短暂的午休比赛进入了下半场,是一道300分的大题目。题目在第二题的基础上,要求我们自行实现策略“射击”行星,并取得尽量高的分数。比赛的评分方式也颇有意思——每一小时就将选手的最后一次提交两两对战计算选手游戏分数的相对排名,并公开所有选手比赛的过程,最终根据最后一次对战确定成绩。
在比赛的一开始我对题目的疑问很多,最初的一个小时我只写了最朴素的随机化射击算法,此外一无所获,也因此毫不幸运地排在众多随机算法的中游。不过随着对题目理解的逐渐深入,我开始着手写更优秀的算法,并利用第二次全场对战测试了一下数据的性质,通过我的游戏过程的表现确定了第三题的数据也是满足所有行星以36为周期运动的。这样问题就容易上手多了——我决定根据给出的位置信息直接得到36帧之后的信息,预算是否能够射击它并得到相应的分数,并引入了适当的优化以及随机化技术。在没有已计算的目标可以射击的时刻,我模仿了第二次全场对战的最优解的方法,向两条最远的对角线不断射击。
这样的策略成功在第三次全场对战中翻身,得到了第11名。随后我也没有从根本上优化我的算法,只是调整了一下参数令其对样例的分数更高,就这样比赛结束了。
最后的颁奖仪式又是百度的宣传片,同时介绍了到场的嘉宾。终于到了揭晓获奖名单的时刻了,我的表现如何呢?综合上午的表现和下午最后一次全场对战的成绩,我觉得自己或许还不错,但毕竟不能确定。最终成绩揭晓,我得知我下午的最终对战仍然位于第11名,同时取得了总分第7的成绩,获得优胜奖(前10)吸走5000奖金。
得到这样的奖项第一反应自然是高兴和兴奋,不过这一阵兴奋过去后,涌现得更多的反倒是欣慰和释然。时光荏苒,我已经度过了那段以荣誉作为人生的最高追求的热血的年纪,开始眺望更高更远的生活,并向往着成为一个背对着繁重的生活压力,仍能打开属于自己的一片天空的自在的游行者。未来的生活不只会有竞赛和荣誉,也有着许多我未曾接触过、也或许将会喜欢上的新鲜的事物。或许日后我会怀念起这样简单而纯粹的生活吧,但此时此刻,我也同样对我的未来给予热切的期望:愿我能成为理想中的游行者,深藏起在我看来还算弥足珍贵的功与名,尽情地享受光怪陆离的人生,勇于追求更多的可能。也许未来有一天,我的人生经历也能为他人提供一些憧憬和希望,那自然是我无比荣幸的事了。