写在前面
其实去年12月打完南京区域赛就基本算是退役了,那时候就想写这篇退役贴了…一直拖到现在
我是很庆幸自己能在大学刚刚开始就找到了自己喜欢做的事情,学习算法的过程总体来看是让人非常开心的,尽管中间有许多的不顺利,但也一路披荆斩棘坚持到最后,拿了区域赛银,也算是不错的成绩了,今年也拿到了满意的实习offer,从算法竞赛到工作也算是无缝衔接
下面都是个人的一些经历和经验,经验也不适合所有人,看看就好
心路历程
我了解ACM-ICPC是大一进来前的那个暑假,在此之前,我基本没怎么接触过算法竞赛,甚至听都没听过。
从接触算法竞赛到现在也就两年多的时间,其中前一年多的时间都没有什么出彩的成绩,有爆过零,也打过铁。
在第二年,当然情况就要好很多,比赛渐渐有起色,慢慢的在银铜之间徘徊,拿牌的快乐是短暂的,回忆起来不过是拿牌的那一瞬间的喜悦,记忆中更多的是这两年遇到的一个个困难。
零基础是会在入门到进阶的过程中接受很多挑战,很多挑战是自己心理上的。像我新生赛的时候就表现很差,也就比爆零好一些,在此之前也努力了很久,但是还被暴捶的感觉肯定是不好受的,那段时间一直在想自己是不是不适合ACM,要不要换一个方向,去学习、参与一些项目也是一个不错的方向,但是我想到自己还是很喜欢学习算法、打比赛的的感觉。
我想的是,学算法打ACM就只有大学的这几年,而做项目在工作之后是一种日常,如果错过了这段时间,工作之后再也不会有这个精力和时间去搞算法了。于是我决定继续坚持,现在看来,当时的决定是对的,当然其他方向也是一个不错的选择,只是我更喜欢算法竞赛这条路。
当然这条路上有满意的人,总会有不满意的人,作为一个比赛,不满意自己成绩的人总是要比满意的人多的。不管结果如何,我想这也是一段难以忘怀的经历。
比赛收获
不管做什么,感觉总是避免不了去想会收获些什么,这虽然很功利,但是很现实,是对的
这段经历带给我的不只是简历上的寥寥几行文字,从知识学习来看,我学到了很多关于动态规划、数据结构、数论、组合、树论方面的知识,从代码能力上来看,大概写了几万行代码,尽管都是那种面向过程的代码,工程能力不好说,但确实对代码能力的提升还是比较明显的,从找实习/工作来看,有算法竞赛经历的简历过大厂的简历关问题不大,如果拿了牌那更好,能够比较轻松地解决笔试的算法题,当然面试还是要好好准备准备,但是最难的算法那关应该是没啥大问题的。
如果不喜欢算法然后感觉学习算法非常煎熬,仅仅只是很看重背后带来的收益,那么可能会很痛苦,因为零基础想要打出点名堂来,基本第一年不太可能,大概率要打到大三才有机会拿到满意的成绩,而且如果不是全心全意的准备比赛,很难有较好的成绩,这就意味着你要在这两年放弃很多东西,课程成绩可能不会那么好看(当然也有大佬两边都搞得很好, 我就一般,不算好也不算差)。
平时训练
对我来说,平时的训练主要分两块,一是算法的广度和深度的学习,一是思维上的训练。
算法的广度和深度主要就是做一些专题训练,因为比赛是三个人,如果不是有OI基础,一个人是没法面面俱到,我们队伍就是三个人分工合作,内容有一定的交叉(无交叉就变成一个人的比赛,没法讨论),基本很多内容都要两个人会,我的一名队友学习主要通过书籍,经典的就是白书(挑战程序设计竞赛)、紫书(算法竞赛入门经典),我主要通过一些网上的博客,比较喜欢看洛谷日报和OI Wiki,不同人学习有不同的方法,不用照搬,找到最适合自己的就行。
思维上的训练,主要是通过codeforces,也就是CF,上面有许多比赛,分Div1, 2, 3,难度依次递减,CF一场比赛一般2小时就结束,题目风格比较偏向思维,不需要学很多算法也能做。
CF的rating和区域赛成绩的相关性有点谜,有蓝名拿银,也有橙紫打铁,但是总体来看,rating高一些,区域赛的成绩不会太差,CF的分高一些,比赛中签到的是会快点,但是后面难的题,如果没有对应的算法知识和深度,可能就很难做出来,而且CF的赛制是一个人2小时单独作战,而区域赛是三个人5小时并肩作战,三个人配合好当然会好很多,而且时间也多,挑战难题做出来的机会也大很多。
总的来看,两个方面都是要齐头并进的,一方面过于薄弱可能比赛的稳定性就差一些