2016年寒假集训

一、时间内容

2017年寒假,在学校ACM集训队开始了为期一个月的集训,感觉收获颇多,于是写这篇文章以来记录。

在这四周里,每周都有训练计划,每天周一至周六,从早上8:00至晚上21:30,差不多整天面对屏幕了,虽然坐在实验室看了一天屏幕,累的腰酸眼疼,但是得到收获让我感觉这些付出都值得。每周末都有一次测试赛,还有为了缓解同学们的压力而开展的集体活动。总的来说这个寒假在集训队里的生活是充实愉快的。

二、体验与经历

接下来写下在集训中的具体体会和经历好了,由于我是中外专业的,结束考试比较早,于是集训早开始三四天,由于考试完整个人太怠惰了,结果集训第一天的时候就迟到了,正好还赶上是分组赛,感觉非常可惜,浪费了一次比赛的机会,并且在一开始就没有跟上集训的步伐。

于是主动和老师道了歉,下午就去实验室和同学一起正常参加集训了,正好在昨天在实验室里同学找到了一个有意思的题,于是下午就在研究这个。刚开始用深度优先搜索推,于是超时,后来改用动态规划,结果推不出来状态转移方程,后来又想了想才发现是一个简单的广度优先搜索。于是就去敲了代码去交一遍试试,一次Accepted,于是就去告诉了同学思路,成就感满满。

然后OJ开了集训的训练专题,之前在《算法竞赛入门经典》里刷过了数据结构和C++的STL,于是刷起来很顺利,一天大概就刷了一半的水题,结果正式集训之前,就差不多完成了所有的题目,然后集训的时候,每天自己只是在补一两道题,于是整个训练都很轻松。在这里我也差不多算是找到了适合自己的学习方法,就是在正式学习,听老师讲课和做题训练,直接先把内容过一遍,因为发现自己更适合直接找一本合适的教材去看书。之前上高数的时候也印证了这一点,每次上课如果没自己看书的话,完全不知道老师所云,之后由于没听懂老师的讲课,于是自己去刷了一遍高数书,结果用了一两个小时过完了老师三四节课的内容,顺便预习了以后的一点内容,然后又上课的时候,发现老师讲的内容就很简单了,最是遇到不太懂的地方补一下就好了。

于是利用这个集训中找到的适合直接的方法去用到下一个学期,在上课和集训之前把内容都自己过一遍。

之后正式开始集训后就进行了分组赛,所幸成绩不错,比赛也算是获得成就感和动力的一个地方了,最后实验室的位置安排和旁边的两个巨巨一组。于是正式的集训就开始了,因为之前刷完了所有的题目,于是只是在刷《算法竞赛入门经典》这一本书,据说是比较难(自己也深有体会TAT),自己也算是从开始到现在坚持下来刷紫书了,收获真的是非常大,书中的一道题,作者就讲了许多的做法,比如一道状态搜索的题,通常做法是暴力广度优先搜索,正好在训练迭代加深搜索,作者也给出了这个的思路,另外还提及了双向广度优先搜索和A*算法。另外就是书中的题好多都是经典题,这里引用一下某位dalao的“刷题哲学”:所谓的经典题就那些,刷完一道少一道。有种很人动力的感觉。由于是经典题网上可以收到很多blog,直接敲完一遍代码后再去翻blog,能学到不少的新知识,之前一道题我暴力模拟写了200行代码,结果搜了下blog,别人开数组映射了一下,代码量直接缩到了100行,顿时感觉非常惊艳,于是赶快对着敲了一遍学习了一下。总的来说这本书真的是一本好书,最近一个月的新知识感觉并不是通过集训,而且自己刷这本书得到的。可能是我比较适合自己去看书刷题吧。

另外不只是算法,由于实验室的学习氛围非常好,自己空闲的时间也学了一些其他的东西,诸如HTML、TCP/IP,Python爬虫之类的,大体上向着互联网的方向上学习的,并且自己开了一台服务器,用Python写了个Web程序,放在服务器上搭了个网页。另外越来越习惯Linux的环境了,现在电脑也是双系统,主要使用Linux,除了用些Linux平台没有的软件,基本上只是在用Linux了。另外由于下学期有Java外教课,直接过了一遍Java的课程,大概把面向对象的知识简单过了一遍。

后来的许多天都是日复一日的训练了,虽说每天的收获都非常多,但是想了想并没有什么值得写的,感觉记忆深刻点的还是比赛吧,最后一场的测试赛现在还是记忆犹新。

原本只是一场普通的测试赛来着,老师突然要求改成组队赛,为了适应不久就要到来的天梯赛(这里以后讲一下),于是就按之前比赛的排名平均权重随机分配了一下。结果运气好匹配到的两个队友也比较给力,出来分配名单后就和他们讨论了一下,讨论下如何分配任务。最后结果是我负责敲代码,另一个队友负责想思路,和帮我一起看代码,另外一个专门负责翻译英文题,没办法讨论的时候发现我们英语都不是很好2333。

比赛第一题是一道英文题,于是直接跳过,让队友去翻译了。然后我和另一个队友去看了第B题,我看了许久没思路,感觉负责敲代码的不能闲着,要一直有思路敲代码才行,于是让队友继续去看这道题,我去看了下C题。看了下是很简单的水题,于是敲了下来,幸好没有立即交上,叫来了队友看了下,结果有一个坑点,判断下左右边界,于是交上去AC了。这时翻译英文题的队友过来了,告诉我了下A题的题意,但是我还是纠结B题于是没打算敲A题。但是这时B题还是没思路,于是我把翻译英文题的队友叫来,一起敲完了A题,两个人检查了一遍,一次AC。无奈这时B题还是没思路,刚开始我的思路是直接暴力嵌套循环的,算了下时间复杂度果断超时,但是可以打一下表,于是打表出来让两个队友去找规律了。这时队友告诉我D题是一个暴力DFS的题,让我去敲,我看了下,刚好之前刷紫书做到过,于是照着敲了下来,过了几组数据一次AC。这时两个队友突然发现B题的递推规律,果断敲了代码,对比了下之前暴力打表的数据,完全符合,交上去,一次AC。这时我也看了下E题,是一个博弈题,看了下没思路,于是让两个队友都去看了,这时我发现F题就是一个无向图的最短路,于是很快就敲了出来,测了下样例交上去一次AC。然后两个给力的队友找到E题的规律了,就是一个if语句就可以解决的题,写了没几行的代码交上去A掉了。这时只剩下H题一个英文题和G题,这时队友已经把所有的题翻译完了。我看了下G题没思路,于是让队友告诉我了下H题的题意,发现是一个麻烦的模拟题,于是让他们去看G题,我去敲H题的代码,大概敲了半个小时,只是一个处理起来麻烦的题,思路不难想,然后敲完过了下样例,没想到交上去居然AC掉了。这时回过头来三个人一起想G题,刚开始我觉得是贪心,后来感觉是动态规划,最后觉得可能是二分递归分治,最后按分治敲了下代码,样例还没过比赛就结束了。

剩下值得记录的就是结训了,最后结训赛,自己已经放弃治疗了,没想到还能水到一个奖品,最后老师讲了下自己寒假的经历,做了下总结,学长(长者)们也上台给我们讲(传授)了下学习方法(人生经验),总的来说过程是非常欢快的,QAQ巨是真的萌,最后要每个专业自荐一个代表讲讲话,然后某学长叫了我的名字2333,于是大概推荐了下紫书,和自己上面所说的学习方法,最后大家一起合影,寒假集训愉快的结束了~

三、一些感悟

之前刘老师也单独找过我谈过话,我当时说过,我当初上小学的时候,只喜欢打游戏,学习只是感兴趣学一下数学,实在是不想继续上初中了。然后是初中,每天浑浑噩噩的学习只是学一下感兴趣的课程,考试得到点成就感,根本没想着继续去上高中。直到后来开设化学和物理,发现原来世界上还有这么有意思的东西,感觉自己如果不了解的话多可惜啊。于是当初中考也只是考了个比较差的民办高中。在高中时追随初中的想法,读了一些物理科普书和名著小说,于是愈加的想要一个更高的平台,去了解更多这样有趣的知识。

然后大学我想继续追随这个想法,开学之前自己其实就搜索了许多ACM相关的资料,于是加入了ACM。

确实ACM这个平台也没辜负我的期望,让我见到了许许多多的dalao,在这个算是不大的圈子里,可以直接和整个中国最优秀的ACMer交流,可以把他们当做自己追赶的目标。另外算法也满足了我对知识的欲望,每次学到一个新算法都是成就感满满,当自己刚学会DFS解决数独问题和迷宫问题时,当自己和队友一起AC掉题时真心感到快乐。

这里借用一下某个ACMer的话:我并不了解人生,也不愿去臆测未来,我只知道一道题WA很久之后突然Accepted的感觉简直妙不可言!

尾巴

其实这时当时写的寒假的社会实践,挺有纪念意义的,以后的也一起放出来好了。