作者:阿秀
阿秀的求职笔记:https://interviewguide.cn
你好,我是阿秀。
前段时间一个学弟找我咨询计算机找实习,聊天中意外得知他是南阳理工大学的,我顿时就来了兴趣,在我的印象中南阳理工是老牌ACM强校。
对于计算机专业的同学来说,ACM比赛应该是知名度最高的算法类比赛了。
如果说计算机专业有一个奖项能够做到通杀考研和求职找工作的话,那肯定是算法比赛相关的奖项了。
求职就不必多说了,现在互联网求职没有不考察算法的,我们组新进来的实习生三轮技术面考了5道算法题;
如果你读研的话,不管是保研还是考研,在复试过程中都会有不同形式的算法考察,可能是上机解题实操,也可能是看你的算法比赛经历。
阿秀以前在研三帮助老师招收计算机考研调剂学生的时候,如果发现考研学生简历中有一些算法竞赛类比赛获奖的话,比如蓝桥杯、ACM等会特别标注一下,换句话说这些奖项确实是在研究生复试过程中有加分的。
今天来跟大家分享一下ACM队员集训日常,顺便给一些想要打ACM比赛的学弟学妹一些建议。
先说一句,南阳理工的在线OJ系统确实不错,以前我刷题的时候就经常去刷来着:http://www.51mxd.cn/
后来在跟这位学弟进一步的聊天中也是得知这位学弟打过很多场ACM比赛了,从大一开始打了三年,可以说是个老鸟了,也拿到过几个金牌。
后来我就邀请这位学弟给大家分享一波他的ACM集训日常,这是本文提纲:
下文中的“我”代表这位学弟:
首先非常感谢秀哥给的这次机会,让我能够分享一下自己打ACM过程中的一些感悟。
我在关注秀哥的这一年里学到了很多,也懂得了想要什么就要自己去争取的道理,特别是秀哥前段时间写的那篇普通学校学生想要找到一份计算机实习需要掌握什么技能文章更是如此。
鉴于我的表达能力并不是突出,如果在看文章的你对于文中的某些描述产生困惑的话,可以在评论区留言,我会逐一回答。
ACM集训队是培养学生学习算法与数据结构的地方,如果能在这里参加相关比赛(文章后面有介绍),取得相应的证书,对找工作和考研都是不错的加分项。
嘿嘿,多说一句,这些奖项可以在学校申请到一笔数额不菲的奖学金,既能学到东西又能拿到奖金。
首先说说我这入队两年多的感想吧。
首先就是刷题真的很重要,单纯的学习算法或数据结构会让我觉得枯燥乏味,但是通过学习它们并且利用它们解题的那种感觉让人无法自拔,也能加深自己对它们的理解,我想这应该是自己所学的语言和知识真的能解决一些问题的时候,所带来的满足感。
还有就是自律也很重要。说来惭愧,其实我的自律性是非常差的,有时候早饭吃完已经上午十点了,打开电脑想去找点东西学,可能就是不经意间打开了抖音,打开了小说软件,或者看了一会自己追的电视,再放下就是晚上了,这时候小伙伴的开黑请求也让我无法拒绝,直接去召唤师峡谷了,然后日复一日,时间就这么流逝掉了。
后来在同学的推荐下关注了秀哥的公众号,看到那些校招成功上岸的同学无一不是认真学了好久的,发现那些取得成功的人基本都有一个共同的特性,那就是能耐得住寂寞,所以在打比赛间歇我也在学习一些别的知识,最近就在刷秀哥推荐的南京大学袁春风老师的操作系统视频。
后来看着他们的学习过程分享我十分惭愧,觉得自己在大学期间浪费了很多时间,如果有相同状况的小伙伴,希望能够引以为戒,多在学校里学一些知识。
下面正式开始聊聊这两三年中我经历的ACM训练吧。
不同学校的入队流程可能不太一样,今天我就聊一聊我们学校的入队流程,主要分为两种方式,一种就是正常入队,一种是非正常入队。
正常入队的时间线要推到每年六月的高考后,我们会建立ACM集训队招新群,之后这个群就一直到等待阶段。
在这期间会有各种渠道加入到招新群的新生,我们也会在群里放一些学习C/C++的资料,之后就到了大范围招新,正常情况是军训结束之后正式开始。
一般这次招新之后群里会有五百到六百人,之后是为期两个星期培训C/C++语言(并不是强制要求,大概刚开始有一百人左右),在这期间还有对应的校内OJ(在线评测系统),进行针对性训练,比如说三个数字比大小训练判断语句,阶乘求和训练循环语句等。
在这之后会有二分、三分、前缀和、差分基础算法等教学,同时每周有一场招新比赛,每场比赛有大概10道题目左右,解题时间为三个小时。
算下来一共有四场招新比赛外加一场新生程序设计大赛,从第三场开始每次面试有七个人左右参加,所以目前每一届大概在二十人左右。
我们学校集训队一直以来有一个传统:如果你有较强的解题能力,且错过招新时间,可以参加集训队日常的训练赛。
最后看你的综合排名,若你的综合排名不错,那么就可以正式加入集训队。
其实这也是尽可能发现招收一些能力强的选手入队,因为我们是要去打正式比赛的,后备生源当然越多越好,当然越强也就越好了。
我们的集训一般分为日常集训、赛前集训、寒暑假集训。
因为每个人的空闲时间并不相同,所以我们这里要求的是如果这节没有课,那么就必须来集训队进行训练,如果有事情,说明原因即可。
每周会布置一些题目,设定最少的题目数量,至于这些题目什么时候写,与怎么学习题目相关的算法都是自己安排。
周六或者周日有一场训练赛,这个是强制性参加的,如果不能参加需要说明原因。
每周日会做一个一周总结,每个人在群里聊一聊学了什么算法,写了哪些有意思的题目。
集训队没有假期,如果条件允许,我们会申请留校,留校期间是上午八点半准时签到,下午两点半签到。
上午一般是在集训队讲讲算法与数据结构,下午写写相关的题目。
暑假参加多校比赛,提高团队的能力,第二天补题,学习多校比赛中不会的算法。
我们要参加的比赛时长一般为 小时,每个队伍有三个队员组成。
在比赛前两个星期,我们会向指导老师请假准备集训,由于每个队伍的训练方式并不相同。
但就我加入的队伍而言,周一、周三和周五一共拉三场同级别的训练赛,每次比赛之后对比排名和赛后总结,隔天去补题。
竞赛组成:
中国大学生程序设计竞赛(简称CCPC)是由中国大学生程序设计竞赛组委会(以下简称组委会)组织的年度性系列赛事,由以下各项比赛组成:
每年8月举办1场网络赛;
每年9月~11月举办3~4场分站赛;
每年11月~12月举办年度总决赛;
每年举办的其他组委会认可的比赛,包括但不限于女生赛、省赛、地区邀请赛、全国邀请赛等。
网络赛、分站赛、年度总决赛的命题与裁判工作由组委会指定命题单位负责,其他比赛相关事项由比赛承办学校全权负责,组委会进行监督,保证比赛的公平公正公开。
队伍组成:
组队参赛,每个参赛队由3名队员和1名教练组成,参赛队员必须是所属高校在籍的本科生或专科生,教练必须是所属学校在职教师,教练有责任保证参赛队员身份的真实性。每个参赛队员每年参加的分站赛不超过两场。
竞赛方式:
比赛时长:5小时。当比赛进行一定时间后,若出现不可预见的事件,组委会有权调整比赛时长,但必须及时通告所有参赛选手。
比赛模式:上机编程,实时评测,实时排名。
比赛题目:10~13题。年度总决赛、分站赛题目为英文描述(个别词句可附中文注释),其他比赛可采用中文描述。
比赛机器:每支参赛队共用1台计算机。
比赛评测:采用机器实时评测,每通过一个题目升一个对应颜色的气球。
比赛封榜:比赛最后一小时不显示排名变化情况,不升气球,颁奖后公布最终结果。
竞赛语言:至少支持C、C++、Java三种语言。
提交反馈:包括CompilationError(编译错误)、RuntimeError(运行错误)、WrongAnswer(答案错误)、TimeLimitExceeded(超时)、Accepted(正确)等。
上方规则来源是一份官方文档,不过需要注意的是由于疫情原因,比赛的时间并不是一成不变的,如果需要的到准确的消息,可以关注CCPC的公众号或者官网。
CCPC比赛是以学校为单位的,所以不能自己报名,而是由学校的教练(负责报名的老师),选拔以及报名。
ACM国际大学生程序设计竞赛(简称ICPC),队伍组成与竞赛方式与CCPC规则差不多,准确点说应该说是一模一样。
不过需要注意的是ICPC没有专门的女生赛,以及队伍选拔方式也不太一样,如果大家有兴趣的话可以关注一下icpc北京总部 (链接:https://icpc.pku.edu.cn)
费用:300元,报名需谨慎,毕竟钱不是大风刮来的。
时间:一般是上学期,比如今年比赛官方报名时间是2021年10月—2021年12月17日,具体报名时间还是看官网。
项目:Java组、C/C++组、Python组、Web应用开发、嵌入设设计与开发。
上面的比赛,可能需要加入学校的ACM性质社团,但是这个比赛不需要呀,它需要的是钱,而且它的举办方是工业和信息化部人才交流中心,在我们学校的文件里它的级别在上面两个比赛之上。
蓝桥杯分为省赛和国赛,省一可以报名国赛(还得再交300元)。
有些学校拿到不错的成绩可以报销报名费,这个看每个学校的政策。
如果大家想单纯的捞个证书,这里是个不错的选择,如果大家问证书有什么用,我就用它来申请过单项奖学金,考研面试也会有隐藏加分。
其实还有好多能捞证书的比赛,大家如果是为了申请单项奖学金可以问问负责学校负责竞赛的老师或者去学校官网找找文件,看看那些比赛学校有单项奖学金。
牛客题库链接:https://ac.nowcoder.com/acm/problem/list
牛客基础题目合集:https://ac.nowcoder.com/discuss/817596?f=b
网站优势:
部分高校的程序设计竞赛都会在这里举办同步赛。
官方会举办一些比赛,还有奖品。
因疫情原因ICPC部分区域赛、省赛也会在这里举办。
可以快速创建重现赛。
洛谷题库链接:https://www.luogu.com.cn/problem/list
网站优势:
可以按照算法标签搜索题目,找到对应的例题。
每道题都会有大佬题解,甚至可以在题解里学习算法。
可以下载部分样例,帮助自己更好的找到错误。
Codeforces是俄罗斯网站,由萨拉托夫国立大学负责为维护和运营,这里是英文题目,英语不好的小伙伴可以使用翻译软件。
Codeforces比赛链接:https://codeforces.com/contests
网站优势:
平均每周都会有官方比赛,比赛难度分为div1,div2,div3,每场比赛题目从易到难
题目更加考验思维
题目会有对应的分数,分数越低题目越简单。
LeetCode题库链接:https://leetcode-cn.com/problemset/all/
网站优势
面试题目,找工作的小伙伴一定要多刷题。
还有好多好多优质的网站没有给大家推荐,主要是我常用的网站就这些。
如果百度搜索牛客,会发现其实它也有好多面试题目,是一个特别好的平台,那里有好多大佬分享的各种知识,单论竞赛方面而言,我一般是把牛客当成比赛平台。
洛谷就是学习一个算法的时候,会在上面找例题,使用确实方便。
Codeforces 是我经常刷题的平台,如果有小伙伴想加入ACM并且想拿个不错的证书,那一定要在这个平台多刷题,还要不断的挑战更高的分数。
LeetCode并不是竞赛平台了,不过面试题目与竞赛题目的格式可能会有一定的区别,所以就单独拿出来说了说。
接下来简单说说今年新生的算法学习计划吧,给有需要的朋友做个参考,因为疫情的原因,今年是线上集训,所以一早我们就安排好了训练计划。
算法 | 时间 |
---|---|
背包问题 | 2021/12/30 |
单调栈、单调队列 | 2022/1/1 |
并查集 | 2022/1/2 |
最小生成树 | 2022/1/3 |
邻接表、链式向前星、最短路算法 | 2022/1/5 |
线段树 | 2022/1/9 |
扩展欧几里得与STL库 | 2022/1/11 |
欧拉定理,巴士博弈、尼姆博弈、威佐夫博弈 | 2022/1/12 |
矩阵快速幂 | 2022/1/14 |
尺取、离散化 | 2022/1/16 |
简单哈希 | 2022/1/17 |
马拉车算法 | 2022/1/18 |
KMP算法 | 2022/1/19 |
字典树 | 2022/1/21 |
之后就是训练赛了,我看今年安排的是直接在牛客上打训练赛,希望他们取得个好成绩吧。
下面的链接是算法对应的例题,在我们日常训练中基本都会训练下面这些类别的题目,给大家一个参考吧。
完全背包:https://www.luogu.com.cn/problem/P1616
01背包:https://www.luogu.com.cn/problem/P1048
单调栈:https://www.luogu.com.cn/problem/P5788
单调队列:https://www.luogu.com.cn/problem/P1886
并查集:https://www.luogu.com.cn/problem/P3367
最小生成树:https://www.luogu.com.cn/problem/P3366
最短路:https://www.luogu.com.cn/problem/P3371
线段树:https://www.luogu.com.cn/problem/P3372
矩阵快速幂:https://www.luogu.com.cn/problem/P3390
马拉车算法:https://www.luogu.com.cn/problem/P3805
KMP算法:https://www.luogu.com.cn/problem/P3375
字典树:https://www.luogu.com.cn/problem/P2580
在学习的过程中一定要多刷题,不论提交题目时评测系统告诉正确还是错误,一定要多去练、多去刷!
不瞒大家,在每次提交题目的时候,我总是有一种莫名的兴奋感,就好像打了一把游戏拿到一次五杀一样。
再次感谢秀哥给我这次分享机会,希望我的分享能给大家带来收获。
最后祝大家生活幸福美满、身体健康、心想事成、万事如意。
我是阿秀,一个平凡的互联网打工仔,我们下期再见。
推荐:求职硬实力(操作系统、计算机网络、数据库MySQL、Redis等)
推荐:总有人在你不知道的时候,默默前行(他人经验)
推荐:求职软实力(面试、话术、简历)
你好,我是阿秀,本硕均于普通双非学校就读,现于抖音旗下担任全栈研发工程师,前后端全能。一路走来,很累也很不容易,希望能帮助到更多像我一样的普通学校的学生。我踩的坑不希望你再踩,我走过的路希望你照着走下来。