-2021.9
在入学的前两年,我其实并没有想好要不要打acm。虽然我参加了学校的选拔,但也是仅仅走了个流程,连打铁资格都没拿到,再加上当时队友也不太想打了,我甚至在大二的暑假就想直接退役。我知道codeforces,但是因为实在是不想熬夜,并没有参加过。
一次偶然的机会,一个学长向我推荐了atcoder。atcoder的时间十分善良,题目也并不难,我就打了几场。没想到我越打越上瘾,就想看看自己到底能打到多少。然后我就卡在了1800。虽然说分没上去,但是手速倒是越来越快了。
2021.10-2022.4
开学之后,按照选拔流程,有一场程序设计校赛。虽然当时我并不是很想再打acm了,但是我为了奖品还是参加了。没想到我靠着atcoder练的手速,直接拿到了第4。
然后我就想,那我去抱个大腿,不就有比赛打了?然后我就找了两个很强的学弟qshr和wyl组队了,因为我看起来最菜,就当队长了。学期中我又打了好几场atcoder,总算是上2000了。
组队之后,其实我们也没训练,直到寒假,教练突然告诉我们有一个正式赛名额,也就是因为疫情推迟的昆明站,让我们vp一场看看水平。于是我们就找了一场20年的ec-final训练,过了6题,看起来还不错,于是就成功拿到了这个名额。
2022.4-2022.12
由于我们缺乏实战经验,在正式赛场上一个小时也没过签到。排名甚至一路掉到了800左右,好在中期我们追回来了,再加上wyl开出了两道金牌题,最后成功rk13拿到了金牌。实际上,我们最后因为离散化问题卡在了一个银牌题,如果这题过了,就可以校排rk6甚至有出线机会(当时我也并不懂这些,只想着别打铁)。
比赛之后,教练觉得我们未来可期,但是看起来我们都想摆烂。我们几乎没有啥组队的训练,我也只是无聊的时候刷了刷atcoder和不熬夜的cf。(div1/arc都太难了,我打到2100/2000就换小号了)
在暑假的集训里,我们发挥的也一般,不过还是拿到了2次icpc和1次ccpc的名额。由于疫情,这几场都是线上举办,我们也发挥平平。ccpc威海擦线金牌,icpc济南最后差1题遗憾守银。icpc南京三个人都羊了,qshr还迟到了无法比赛,最后铜牌。
2023.1-2023.10
赛季结束之后,我问队友还要不要打,队友表示打可以,但是不想训练。正合我意啊!我想去旅游,于是我们就准备再打一年。
这一年,我们就真的没训练。连我的atcoder频率也降低了很多,暑期要求的5场cf,我甚至都没打够。
神奇的是,我们的校内成绩竟然更好了(现在看来,可能是原来的强队退役了)。我们这一年成功拿到了2场icpc和2场ccpc名额。冲着旅游的想法,我们全选的热门城市(然而队友太忙,再加上高铁太累,根本没时间旅游),跟校内1队的4场赛站完美重合了……
2023.10-2024.1
然后就是紧张刺激的线下比赛了。
ccpc秦皇岛,前期各种bug,同校队伍5题登顶的时候,我们2题坐牢。当我们改完签到bug时已经封榜了。最后一题实在没时间了,6题守银。
icpc南京,我还没睡醒的时候,队友已经a了5题了,手上还有两题。我跟qshr讨论出了第8题。最后我一题没写,金牌rk7。
ccpc深圳,我想出了题目就扔给队友写,成功金牌。
icpc杭州,我签完到就去想大模拟,然而最后也没搞出来。好在队友其他题写的很快,wyl还抢到了一个一血。最后也拿到了金牌。
icpc ec-final上海,这一场机时倒是用的很满,但是实在是写的慢又写一堆bug,最后也是决策失误,dj双开都没过,过一题就金了(都过了就出线了)。
有意思的是,两场银牌我写了3题,3场金牌我加起来只写了1题。原来我才是那个小丑….
后记
我一共参加了9场xcpc,5金3银1铜。这个成绩对于我这样又菜又不练的,已经很好了。
除了xcpc,我还混了个蓝桥国一,csp455,ccf优秀大学生。我还给这两年校赛出了题目,体验了一把出题人的感觉。
acm究竟带给我什么?
事实上,我就是把acm当成一个游戏来玩的。当我第一次打atcoder的时候,我就被这种刺激的快感吸引到了。虽然acm和oi的题目是差不多的,但是oi是考试,acm是个游戏。如果acm和oi的形式一样,我也许并不会选择acm。在acm集训中,我也认识了很多同学,这也是让人开心的。
其实我是很幸运的,我们系对acm十分重视,不仅有奖学金,还有大量的保研加分,我也是通过acm加分在绩点50%+的情况下直博本校了。但是实际上,我在拿到金牌之前,并不知道这些。
当然,如果想追求更好的成绩,像我这种摆烂是不可取的!每个人都有自己的目标,向着它努力前进吧!
经验分享
最后我把我在acm中得到的经验分享给大家。
由于大家的水平各不相同,我的经验并不适用于所有人。如果有不对的地方,可以直接无视掉。
我对acm的理解
在我的理解中,写一道acm有三个关键步骤(默认大家能读对题目),第一个是想出正确思路,第二个是写出代码,第三个是将代码调对。处理这三个步骤的能力虽然是正相关的,但是并不全是完全成正比。第一点决定一个队伍的题目数上限,第二点决定队伍的罚时上限(当然也可能会影响到题目数),第三点也是一个队伍的稳定程度。
有人可能觉得2和3是一回事,其实并不一定。想必大家都经历过很短的代码一直调不对的情况吧。debug不仅仅是调出来编译错误和手误,还有构造边界数据的能力以及对着打印代码调错的能力。
曾经有人说过,一个优秀的选手,思考,coding,debug的时间之比应该是6:3:1。但是这只是个个人的理想情况,而且acm是一个团队游戏,让每个人发挥出自己的长处是最好的。当然,具体的队伍分工还是需要自己摸索。
关于训练
我们队伍基本上不训练,所以并不能给出详细的训练方案,只能按照我的理解随便说说。
训练的主要目的,也是提升上文中的三个能力。思维能力主要是通过做难题/专题训练提升,而代码和debug能力主要是通过cf/vp来提升。找到自己的短板,才能有针对的训练。
对于新手来说,不建议只刷cf。cf的div2A-D不需要任何算法,基本上都是找到关键性质然后随便写写的题。如果想要刷题,可以刷abc(atcoder beginner contest),这个里面有很多经典的算法和trick,在你不能场场ak的时候,还是对你有很大帮助的。
然后就是一定要补题。
关于赛中
每个队伍的情况不同,究竟是三人三开,还是两人想一人写,还是两人睡一人solo,看你们队伍的情况决定就好。我这里说一些小的注意事项。
在决定上机之前,最好告诉队友这个题目预计需要的时间。对于比较复杂的题目,要加上debug的时间,除非你写代码从来不会出错。
在口胡完题目之后,写这道题的人最好想清楚细节以及边界情况。
如果当前的题目错了,但是不知道错在哪,还有其他题可以写的话,就不要占着电脑了。事实证明在没有电脑的时候思路会更加清晰。自己想不清楚就去找队友讨论,这是个团队游戏。
不要盲目跟榜,也不要不看榜。2h之后还几乎没人过的题目,基本上都不会太好写,但是这并不代表不能写。要是3-4h还是没人过甚至没人尝试,那大概率是不可做了。
如果计算几何不是简单题,那建议不要去写了,除非真的没有别的可以写的。
每个人都有自己的强项和弱项,但是像dp,图论,简单构造这种出现频率很高而且可做的算法,还是别全堆给一个人了。前期看题的时候,也不要看到自己擅长的方向就直接去搞,说不定不可做。
其他
其实找一个志同道合的好队友是收益最大的,虽然这玩意并不是自己能决定的,但是万一就找到大腿了呢?
每个人都有瓶颈期,如果感觉累了不能提升,那就去玩玩原神吧。
2024年了,acm对于找工作的收益已经不太大了,如果你不是单纯的网瘾,而是还有别的目标,那该实习还是得去的。