三、如何科学地做到:算法竞赛从入门到放弃/算法竞赛从了解入坑到快速放弃指南?

搬运自知乎 https://zhuanlan.zhihu.com/p/29598587

相关标题

大学僧算法竞赛简介及入坑指南

大学生acm-icpc算法竞赛入坑指北

算法竞赛从C语言入坑到转Java开发

大学算法竞赛两年入坑总结

大学生搞算法竞赛的入坑大纲、刷题心态、前途、¥途、刷题心态

笔者在某二本大学, 曾入坑学校集训队两年,当过一年助教,带过一年的集训队管理,给新生和新集训队成员带过课;目前已退役,转java EE开发了,在学校的电商实验室做开发。 最近回头看了看这篇我一年多前新生动员时写的文章,有大量纰漏和不足,先已经抽空加了点图片和重新修订了一下~

2019年2月12日

如果你已经精通C语言、常用数据结构及常用算法,请自动忽略自文档。以下纯属个人观点,仅供参考。以xx二本大学大一新生小白为对象,进行分析。

笔者最高也只拿到过区域赛邀请赛的一枚铜牌、某弱省省赛铜牌银牌、天梯赛低分174分和蓝桥杯B组的省一国二, 大学之前也没有接触过C语言等计算机语言,如有更高的目标, 本文可忽略。
【前方独白】
ACM并不是适合所有的人,需要坚持,坚持,半途而废的人很多很多;入门不需要太深的数学能力,毕竟我们是工科生,并非理科生;入门的话,数理化没什么大碍。

(独白:数学学渣的笔者飘过,高中数学笔者一直就是拉低平均分的那个存在。数学太差,不建议入坑算法竞赛,这条路走不远,勉强走的话——走地也很痛苦;当然你要是逻辑思维很强倒是可以试试看!)

入坑大纲

砖家推荐以下阶段:

第一阶段,先学习《C语言程序设计》知识,OJ上的前200道题目都有配套的联系(百度搜索zznuOj、zzuli oj、zzu oj、hdu OJ 都可以,自己申请一个账号即可开始刷题),掌握基础C语言语法,指针进阶和文件部分的内容可以暂时放放;有学长说一个月看完这本书就够了,笔者当时看了三个月! /捂脸

第二阶段,接着推荐《啊哈算法》,算法分析生动形象,适合缺乏抽象思维的同学;全书只用C语言描述算法——有利有弊;《啊哈算法》现在还出了一个数据结构板的教材,也很优秀,值得推荐。《算法分析与设计》这本书也很好,这是一本我唯一仔仔细细看完的一本书;《算法笔记》这本书也很不错,内容详实,很适合竞赛入门知识准备(据说某高校集训队就通用的这本参考书);还有《挑战程序设计竞赛》这本书以及他的数据结构专题版也很好。推荐的书都很不错,有条件可以买下来(即使不看当枕头垫着也很舒服),图书馆都有;刘汝佳的书也很好——不建议能力不是很强的看。

第三阶段,大量刷题,建立一个完整的基础的算法体系框架;可以将kuangbin的博客园的acm题集作为参考,依次刷完......

同时,还有各种周赛、联赛、线上线下比赛可以接触到,多打打比赛才能感觉到自己的差距所在。

下面的链接算是后续的发展了,需要一定的积累和沉淀。

ACM&OI算法竞赛中有哪些奖励丰厚的线上线下比赛...

了解一下这些比赛: 百度之星程序设计大赛 (推荐)/CODEM美团编程大赛 (推荐)/牛客网线上算法有奖竞赛 (推荐)/LeetCode有奖竞赛/腾讯广告算法大赛/51NOD编程社区/阿里的天池社区.希望可以为你提供到一些帮助.比赛时间千万不要错过了!

众所周知, 各大厂商或者平台时不时会举办一些线上线下的ACM/OI算法竞赛, 可以为广大ACMer或OIer提供丰富的参赛奖励或者福利; 这些大型线上或者线下比赛,不仅可以为各位acmer或者oier 提供一些新题型用于训练刷题, 还有丰厚的奖励也是十分诱人的,比如奖金/奖品/纪念衫/提供offer等.枯燥无聊的刷题训练搭配上这些比赛,再叫上几个小伙伴一起愉快地AC, 岂不美哉.

新生误区

小OJ(小学校的online judge系统 )上的某些题目不必深究,不必吊死在一棵歪脖子题上——先放一放换一题就是;某些题目本身就有问题,数据也可能带毒等。笔者曾深有体会,直到笔者也有OJ后台的控制权限后,才发现有很多数据真的一言难尽~~

基础题目尽量多想,实在不行就换个题目换种思路;不要急于百度找答案,不然很容易养成一遇见难题就搜答案的坏习惯;多和别人交流,在AC之后可以尝试搜搜题解,没准会有新的收获,或者会提升自己的代码技巧。多交流可以发现自己的代码不足,闭门造车不推荐(不排除你的能力真的很强,比如半年A完小oj上的大多题目)。

还有就是刷水题攀比的现象,为了名次直接百度答案复制粘贴——没什么意义;骨灰级陈学长之前强调过:“刷水题要适可而止,前200道就足够了。”我也觉得怪合理,之前我就在水题上刷了三四百题——后来才感觉浪费了很多系统训练的时间;提个醒,建议水题做两百道就去看书吧(按照上面的入坑大纲推荐来)。

英语不能放弃,最好从大一开始背四级词汇,背完背六级;对理解后面的英文题目有很好的帮助。推荐《百词斩》,形象生动。

刷题心态

不要好高骛远(很多方面),脚踏实地,推荐的书籍最好拿准一本就一直看下去;笔者看的书不少,但认真看下去的没几本,借的书一大堆也没什么用(大多都用来睡觉枕头了)。

半途而废的童靴也不在少数,最后能陪你一直走到省赛的伙伴都很不容易;最好能拉住宿舍里的一个室友陪你一起,集体开黑敲代码刷榜单(这是多么激动人心的一件事,最新一届就是这样,一个宿舍集体刷题占榜);同机房里的人多接触,多发展一下人际关系。

嘲讽的人应该也有,不同的人生经历,不同的价值观,不同的大学观世界观,没必要事事在意别人的目光;没事别老呆在宿舍里,定好自己的目标,坚定地走下去。

我大一大多时光几乎都献给了算法竞赛,从来没有去什么景点等玩过(主要是又懒又宅),无论什么课大都常常在自学算法书,王者荣耀我都卸载了六七次(马上我会再卸载一次);无用功做了一大堆,坑也踩了一大堆,最后的省铜也是不尽人意的,几度万念俱灰,还好我坚持了下来。无非就证明了我不是什么bug并且逻辑思维和智商也不怎么出众。凡事有利也有弊,这些经历起码也磨砺了我的心智。

大二好一点,算法题刷的不怎么勤了,开始组团切lightOj,主要刷了好多图论、各种花式搜索和数据结构等等.

qian途(极小概率的量子云会坍缩成现实)

ACM/ICPC国际大学生程序设计竞赛由美国计算机学会主办,是目前国际大学生计算机相关领域公认规模最大、水平最高的赛事之一,对参赛学生的学术水平和实践能力要求很高。--官方说辞。 /手动滑稽脸。 ——百度百科的acm-icpc

也就是说,通过算法竞赛里面的比赛,达到一定的名次后,你将获得进入BAT(百度腾讯阿里)的机会;如果你不想通过算法竞赛,那么目前只有普通本科学历的你的机会只能无限趋近于0。
上面这句笔者之前写的话,笔者也不记得是哪个学长跟我说的了,还是在某个地方看到的!总之,算法竞赛的奖很好看,重点大学可能会和保研有关。之前笔者还是很赞成这句话的,现在看看倒不这么认为。

算法竞赛可以提供一个很好的起步点和跳板,比如在机器学习和操作系统开发专业方向来说是很有用的,以及助教或者算法教练,等等。在一线大公司的面试中,算法和数据结构能力是必考项,相对来说,搞过算法竞赛的会有巨大的优势而言,比如会有免上机笔试的优势,这一点是母庸质疑的。
通过算法竞赛,你可能将获得诸多的旅游机会,轻院是我们学校新生常去的地方,学校管接管送管吃,还有一些举办区域赛的大城市,往往是提前几天就过去——先旅游一番;算法竞赛还有很多种,比如ACM省赛区域赛、蓝桥杯省赛国赛、CCCC举办的天梯赛、CCCC的PAT单排赛、杭电的女生赛专场以及一些其他知名公司(百度阿里腾讯美团等)举办的算法竞赛,可能会有一种属于你的菜。

学校有几个实验室,老师们招人都是从集训队里挖的,或者是招退役的队员;在算法竞赛中拿几个像样的奖项,以后对你的研究生面试也是很有帮助的,导师们比较喜欢这类有代码基础很好的学生。相对来说吧,算是在计算机专业里,比起其他的普通的活动奖组织奖创业奖来说是很有优势的,算是很漂亮的奖了。

¥途

这个方面跟上面的不同。谈qian多俗啊,不想看的可以选择性跳过该部分内容!

引用zznu的2017年的奖学金评定——“ACM程序设计竞赛获奖积分:省级以上金奖获得者,以年级专业拓展性能力最高分积分;省级以上银奖获得者,以年级专业第二名拓展性能力得分积分;省级以上铜奖获得者,以年级专业第三名拓展性能力得分积分”。你的活动分会得到保证,不挂科,不出意外——奖助学金问题不大。

新生在轻院新生赛和校新生赛中脱颖而出,会获得学院的奖励数百到千元的奖励,比如之前在某新生赛中拿到第一的某学长得到了千元奖励(如果我没记错的);省赛达到一定的名次也会有数千元到万的奖励,区域赛更少。

没错,区域赛更少!举例笔者的那块区域赛邀请赛铜牌,300块,一个队三个人分,人均100,又不幸被院里财务紧缺为由砍掉一半!区域赛牌子更不好拿,含金量会较于省赛更高!
但区域赛对学院的评建工作意思不大,起码本校报销来往路费,这一点是很不错的!好多学校,人家出去打比赛都是自费的,自费的,来回加上住宿也得小千块钱!
敲门砖
acm可以是很好的一块敲门砖
14级的XX学长曾讲了很多事例,去一些中大型公司面试的话,省赛金银奖会起到很大的作用,包括他本人就是靠着奖项进的公司(实习工资10k+);还有一个AK队的队长,就提到还有一个轻院的就是拿了省赛金奖之后就退队了---凭着奖实习工资就直接稳在了10k。(可能会有偏差 /捂脸)

其实,计算机专业坑很大;笔者刚入坑的时候,以为以后的工作就是“算法+数据结构 = 程序”,搞好算法竞赛就以为搞好了一切,有点迷。

其实专业课还是很重要,不能落下,在开发日常中,除了算法竞赛中见到的程序代码(即算法和数据结构)外,还有计算机语言语法及特性(Java/C++/Python...)、SQL脚本、编译器工具、开发框架、团队协作(git)、数据库、分布式、代码规范、测试工具等等。

这个坑非常大,慢慢地就能接触到更多的东西。

口说无凭,推荐一个JavaEE方向的博主的博客,最近笔者也一直在学习这个博主的文章, 感兴趣的话可以看看, 以及下面我摘取出了他的"Tag列表"; 他的文章中很多都是开发日常, 还有一些程序员面试及生活文章.

crossoverJie - 博客园

www.cnblogs.com

知乎

这是一个很好的APP,大学僧都在用,你值得拥有。上面有个搜索栏,搜一下你的疑问。

百度

有什么疑问,或者不懂的知识点就上百度搜搜;比如“醋溜白菜怎么做”、“C语言如何入坑”、“C语言的某个知识点怎么理解或者实例解读”、“编译器怎么用怎么调字体找设置”等等等。
现在起码每天都搜搜搜,工作学习的时候也都是搜搜搜;21世纪了,除了问爸妈,问搜索引擎去吧。

后记

部分为本人观点(会有偏差),随便配的图,一些是老师和老学长说过的,还有一些是网上的言论;因人而异,自行决定,可供借鉴,多体谅哈。笔者刻意回避了数学(弃坑了),因为我的数学就学的一团糟。

感兴趣地收藏一下呗,回头可以来杠两句,随时欢迎,欢迎。

后面应该会写点其他的总结或者日常段子吧,计算机专业相关的,算法竞赛相关的,JavaEE或者大数据相关的。

笔者知乎上,还有另一篇C语言和算法竞赛的入坑指南,欢迎踩踩。
https://zhuanlan.zhihu.com/p/29598587
编辑于 2019-07-30
ACM 竞赛
算法竞赛
Java 编程

猜你喜欢

转载自www.cnblogs.com/zhazhaacmer/p/12741502.html