前言
每一个计算机专业的同学都应该听说过ACM竞赛,这是全球最具影响力的大学生程序设计竞赛。
小熊大学零基础入门编程,拿到ACM亚洲区金奖后成功保研了清华,而我选择工作的队友,更是拿到了年薪60w+的大厂offer。
这次就来讲讲如何零基础入门ACM竞赛。
前期的心态调整
零基础入门时,你可能会发现圈内有很多中学有基础的大佬。
可能当你正在摸索OJ刷题的输入输出格式时,
大佬们已经在群里交流着各种看不懂的算法,刷着Codeforces上分,
这时很重要的一点是时刻保持一个平和的学习心态。
不要陷入无谓的焦虑,这不仅无益于缩小与大佬们的差距,还会影响每天刷题训练的效率。
另外要知道,在ACM圈内,人与人之间的差距比人与狗之间的还要大。
但是通过努力,我身边也有不少大学零基础入门拿到银牌及金牌甚至进入final的选手。(这不是鸡汤,只是需要正确系统且勤奋的训练方式)
踏踏实实学习算法,勤奋刷题,借助公开免费的学习资源足够支撑我们提升到非常高的水平。
入门C语言
完全零基础的话,首先需要简单学习一下C语言的基础语法,
我当时在高考后的暑假在中国大学mooc刷完了C语言程序设计-翁恺这门课,
课程内容简单有趣,非常推荐作为C语言学习的入门课程。
在学习的同时,可以在 HDOJ-11页上刷简单的入门题,熟悉C语言基础语法和算法题目的输入输出格式。
对于不会的题目可以直接百度,网上会有大量的博客可以参考。
度过语言学习的阶段以后,就可以开始系统地学习算法和刷题了
书籍
这是我在训练过程中收集的一些算法书pdf版本(其实自己也没有全部看完过),有需要的可以直接下载:
可以关注公众号「新熊君」,专注分享:算法 | 实习 | 学习方法 | 思维提升。公众号后台回复「算法书」,免费领取56本算法经典书。
因为这些书都比较厚,携带不方便,我都是通过pdf的方式保存在ipad pro里面,通过Apple Pencil来做笔记,进行学习
主要推荐以下几本:
啊哈!算法:非常适合完全零基础时的入门书,用故事和图来讲解简单的算法,学起来轻松有趣,我当时学最短路就是通过这本书理解的,不到一个小时看完书就能自己敲代码过模版题了~
挑战程序设计竞赛 :圈内经典的入门书(大家都称之为「白书」),知识点比较全面,有丰富的例题和习题,可以配合「挑战程序设计竞赛习题册攻略」进行食用,体验更佳
算法导论:不建议从头看到尾,但可以用于系统学习部分算法。答主当时学「快速傅立叶变换」在网上看了很多博客都不得甚解,最后自己静下心看了一遍「算法导论」才完全明白。
分享一个我常用的算法学习小技巧:
对于才开始接触的算法,常常是有一大堆文字或者代码,
我会自己构造一些小数据,按照描述或者代码流程来手写模拟数据的处理过程
(ACM算法题目的本质也可以理解为对输入数据进行处理得到输出数据)
多模拟几次过程会慢慢加深对算法的理解和认识。
视频学习
我看书学习算法时常常会感觉枯燥,
这时在b站和YouTube看算法讲解视频来学习就显得更加有趣,
特别对于一些比较难入门的数据结构(比如后缀数组、主席树等),通过看视频来一步步模拟算法的运行过程,讲解原理,会比文字的学习更容易理解和掌握。
推荐的b站up主:
https://space.bilibili.com/611212/
@qscqesze
当时是看卿学姐的视频入门了主席树(感谢!https://space.bilibili.com/120174936/
@不分解的AgOHhttps://space.bilibili.com/7711573/
@AutSky JadeK
推荐的YouTube:
https://www.youtube.com/channel/UCBr_Fu6q9iHYQCh13jmpbrg
@Errichto
当时看了他的Dynamic Programming lectures入坑,这是他的自我介绍:
I’m Kamil Dębowski, better known as Errichto. I compete in and organize programming competitions. I make educational streams on Youtube and Twitch. I'm a finalist of ACM-ICPC, Topcoder Open, Facebook Hacker Cup and Google Code Jam. I got a second place in Google Code Jam 2018. I am/was nutella in Codeforces and target in Topcoder.
PPT
看PPT也是一种很好的学习方式
比如「莫比乌斯反演-PoPoQQQ」、「线性筛法和积性函数-贾志鹏」等就是很好的入门莫比乌斯反演的学习资料
当有想学的算法时,可以百度或者Google一下相关的PPT文件,可能会有所收获。
推荐博客
很多大佬喜欢在博客记录和总结自己刷过的题目
有时候你也能从他博文的发表时间中借鉴他的学习成长路径
同时遇到不理解的算法和没思路的题目时,可以直接去几个博客平台搜索,推荐:
- CSDN、博客园、简书
另外再推荐几个网站和博客:
https://oi-wiki.org/:
有很多算法的入门教程和总结,非常喜欢网站的风格http://blog.watashi.ws/:
@watashihttps://www.cnblogs.com/kuangbin:
@kuangbinhttps://www.cnblogs.com/qscqesze:
@qscqeszehttp://hzwer.com/:
@hzwerhttps://www.cnblogs.com/clrs97/:
@clrs97https://blog.csdn.net/u013368721:
@陈鹏
同校很佩服的学长,大学零基础开始进了finalhttps://blog.csdn.net/snowy_smile:
@snowy smilehttps://blog.csdn.net/skywalkert:
@skywalkert 唐老师数论相关的博文写得非常赞!https://blog.csdn.net/acdreamers:
@ACdreamerhttps://ruanx.pw/:
@阮行止https://blog.csdn.net/PoPoQQQ:
@PoPo QQQ
欢迎关注公众号「新熊君」,专注分享:算法 | 实习 | 学习方法 | 思维提升。公众号后台回复「算法书」,免费领取56本算法经典书。