2020华为软件精英赛参赛经验分享
17号,经过一下午的努力,最后复赛成绩是上合赛区第8,止步复赛。这个成绩对于我来说,是非常不错的成绩了,因为作为一个比赛新人,这是我第一次参加软件方面的比赛。组队之初,我的目标是进64强,可是随着这一路的拼搏,跌跌撞撞到了复赛,最后拿到第8的成绩,对我而言已足够。
今年的比赛题目是大规模有向图找环,其中初赛时环的长度是3-7,通过比较常规的找环算法,最后选择了dfs。然后写了几天,代码第一版完成,这时也开放提交了。第一次提交时时间是13s,那个时候刚有成绩,看了一下榜单,排20多名吧,已经非常开心了。然而接下来就是各自被大佬虐的场景,排名一天天往下掉,于是我开始了优化之路。在这个过程中,认识了成渝赛区的C佬,西北赛区的Y佬,还有上合赛区的魔法少女等大佬,大佬果然是大佬,非常慷慨的和我分享思路,在这个过程中真的学到了很多,感觉计算机系统方面的知识都因此懂了一些。然后就是各种水群,群里也有很多大佬,他们也会在群里说一下自己的思路啥的,还有D佬等大佬“开课”,非常有意思。从4月1号一直到27号,这一个多月就是疯狂优化,一开始队友有事没咋做,基本上就是我一个人各种熬夜做,哇那段时间压力怪大的,每次出bug的时候都想哭,当然哭是不能解决问题的,我只能一边嫌弃自己菜,一边百度学习调试,然后照猫画虎找问题。有时候实在不会就会去请教大佬,大佬有时候一句话就能让人醍醐灌顶,毕竟经验在那。然后4月20多号,我的队友也加进来了,终于结束单机模式,可以加速前进。到4月底的时候,由于背靠各位大佬,各种问优化方案,那个时候排名就比较靠前了,基本上就是30强左右(当时小号严重影响排名,害得我一度以为照这个势头下去就凉了)。然后这个时候听说只有进了32强才有获奖证书(实际上不是),于是我方了,又开始熬夜优化模式,外加大佬buff,最后成功优化到前排,一度登顶第一,然后我们队怕排名太高容易翻车,就上传成绩比较低的版本,即使这样也能保证在前10了。
28号,到了要缩圈的时候(初赛进复赛),这个时候官方开始删小号,删完小号我们队是第七(最好成绩版本实际上是第二,没上传),稳进复赛。我觉得能进复赛主要是因为各位大佬无私分享思路,外加我和队友都不坑,一直花时间做这个,所以才能有这个成绩。复赛阶段,我和队友都比较佛系,因为一开始没想过能进32强,所以我和队友这时的目标就是有成绩拿奖就行,因为当时规则好像说复赛要有成绩才能拿奖。于是就在原来初赛代码基础上,针对复赛修改的条件做了相应的变更。复赛主要是把转账金额加进来作为限制条件,所以改起来还比较快,然后还有一点就是数据变大,原来的转账结果最多200万条,现在是2000万条,数据规模扩大后就很考验数据结构的适用性了。我们一直用的静态数组,存图结构为了求稳,就在复赛时换成了vector加自定义结构体,然后上传有成绩,于是就没有肝了,毕竟已经达到了我们的预期。
5月17号,也就是写下这篇博客的今天,官方又一次修改了规则,环的长度变成3到8,转账金额也有32位无符号数变成了32位数外加最多两位小数的形式。要求在下午2点到4点半这个时间段内修改完成。这一修改,主要是影响了dfs找环那块和筛选条件判断那块。原来我们存金额就是long long类型(因为金额有乘法操作),这次加了限制条件后,实际上还是可以用long long类型,两位小数的话,可以使转账金额整体乘100,就不存在小数了。而环的长度的改变,对于我们来说主要是要再加一层,然后存储结构改维数,其它的还好。但是这也真的刺激,两个半小时写完代码,并且保证完全没问题,确实挺有挑战性(不少大佬折戟于此)。队友很快改好了代码,我们队的代码跑官方给的小数据没问题,但是上传出错,于是我去交流群里问有成绩的大佬要他们跑的数据集,准备跑了看看和他们答案对不对得上(及时交流非常重要)。结果我们多了10个环,最后半小时就一直在找bug在哪,结果到了4点22分的时候,我终于找到问题在哪,赶紧上传,最后出结果是7.8s。看到有成绩的时候终于安心了,至少这一个多月的努力没有白费,第一次软件比赛以它画下句点。
接下来应该还有复活赛,但是我觉得对我来说已经足够,我下一阶段还有更重要的事情要做。参加这次比赛使我意识到编程的乐趣,使我认识到编写代码时严谨性非常重要。有时少些一行或者多加一行就会导致全盘皆输,因此要求编程者要静下来认真思考代码逻辑,还要就是有bug时一定不要慌,要冷静的找问题在哪。参加比赛非常考验一个人的耐心和韧性,要是我在出很大的bug时就放弃了,那么就不会有今天这篇感悟了。所以有时候真的在想放弃的时候再坚持一下,一个人的能量真的是无穷的,千万不要低估自己。像我这样没有比赛经验的小白都能做到的事,说明有编程经验的其他人也能做到,可能很多时候只是一个坚持与否与方法的问题,不过这个都是可以学习与改进的。
比赛还没结束,希望那些进入决赛的大佬们继续加油,这一路有幸认识许多志同道合的小伙伴,是这次比赛最大的收获!