作为一个零基础的小白,acm这条路走的并不顺畅,接触的信息很少,以至于在这条道路上走了不少弯路,浪费了大量的时间,现在也快要退役的阶段,想给青岛大学或者外校的学弟们写一篇博文能够清楚地认识一下acm和该如何备战acm。
ACM 国际大学生程序设计竞赛 (ACM/ICPC 或 ICPC) 是由美国计算机协会 (ACM) 主办的,一项旨在展示大学生创新能力、团队精神和在压力下编写程序、分析和解决问题能力的年度竞赛。经过近 30 多年的发展,ACM 国际大学生程序设计竞赛已经发展成为最具影响力的大学生计算机竞赛。赛事目前由 IBM 公司赞助。
ICPC和CCPC的区别 在于比赛的范畴不一样,ICPC是面向国际,CCPC是面向国内。
但是二者都是含金量极高的计算机程序设计竞技大赛
每一个赛季的开始大致是从每年的7-9月份开始,赛季时间为一年。
acm的赛程流程
9-10月: 一到两场icpc网络赛+一场ccpc网络赛
11-明年2月: 各个赛站的区域赛(相当于国赛)
以下是2022赛季(46届)的赛事安排
团队参赛,每队由至多3名队员组成。共用一台电脑,程序现场提交,计算机自动判题,比赛时间5小时,10题左右,试题描述为英文,前四个小时可以实时看到排名,最后一小时封榜,无法看到排名。试题只有通过才计分,通过的试题称为Accepted,简称AC或A,未通过试题可以修改后再次提交,通过后计分但罚时,最后根据解题数量和用时进行排名。选手可携带任何非电子类资料,包括书籍和打印出来的程序等,每个题目对应一种颜色的气球,通过该题目的队伍会得到对应颜色气球。
关键字:试题为英文题面 、三人组队 、时长为五个小时 。
比赛时间:大致在9:00-14:00 、 12:00 - 17:00 、 11:00 - 16:00 三个时间段之一
不过2022南京值得眼前一亮的是采用了双语题面,算是一种革新,也算是对当前ccpc的一种挑战(常年因为中国比赛用英文题面被吐槽)
排名按照acm赛制,即解题数量多的、解题数量相同时罚时少在前,交错一发罚时20min(编译错误可能没有罚时)。
1.icpc / ccpc 官网查询
2.最常用的网站-也是最便携的方式
xcpc榜单
网址https://board.xcpcio.com/
当然了,校排指的是学校排名最高的队伍在所有学校的排名,是学校排名,校排就大胆地把希望交给你们学校一队了。
大部分高校在报名赛站的时候会采用各个队伍的网络赛排名校内分配名额,所以在打网络赛的时候也要拼尽全力,网络赛排名会影响到后面的报名赛站(名额按校内排名分配,排名高的优先)。
接下来的比赛就是各个省内的cpc省赛,不同省份的省赛情况不同,山东省的比赛情况一般在明年4月。
省赛没有区域赛对标的网络赛,需要校内选拔赛去分配名额,我们学校选拔的名额大概是15个队伍,学弟们要加油往前争夺名额哦!
打acm最重要的是两个东西 - 算法+思维,缺少一个都不可能走远。
算法的原始积累(如果你想免费自学的话,可能这里没有你想要的东西(因为我不是自学型选手))
当时有一位学长在群里发了一个1元钱的acwing的暑假每日一题,我怀着好奇心买了一次,然后我就开始沉沦上这个网站的学习氛围,然后在这里完成了算法的原始积累 。
里面的算法内容非常全面,几乎完全囊括了你前期所必须学的所有算法。当你刷完算法基础和算法提高课之后,你的思维方式大大改变,开始有了一个思维的雏形,开始能够正确认识acm的竞赛的本质和题目考察性质。
讲讲个人,在我认识到算法之前,我的思维仅停留在暴力枚举,找规律上,当我刷完算法基础课的时候,我的思维就已经开始达到该如何去套用这些板子上,当时还是仅仅了解这些性质,但是刷算法基础课之前和之后你会有一种成就感,这是你收获到的第一个喜悦,其次你的信心,算法功底,思维方法会有大大的不同。
算法提高课与算法基础课最直接的区别是细化了不同的知识点,里面出现了许多经典的例题,是不同套路的一种经典思路和想法,例如dp从线性dp、简单dp到各种dp和dp的优化。对思维的锻炼也更大,对个人的要求也很强(对于前期开始学算法,C++的人来说)。 讲的最全的还要数动态规划,图论,高级数据结构,例题从简到难,简单至黄题(洛谷题目颜色,普及),难则至紫题(省选),是一种非常良心的课程。
算法提高课,其意义在于在你做题的时候,能够给你提供一个经典思路。看到题目之后,大概能够约摸猜出算法,但是不知道该从何下手,也不知道去怎么实现。 算法提高课可以给你一个经典的思考方式,当你猜出算法的时候会自动地按照这种经典思路去想,以至于能够继续推测,继续思考,然后想到正解 。同时,它又算是一次算法的一个大的积累,当你学完算法提高课的时候,其实已经可以涉及acm的相关知识,去锻炼思维,做相关的区域赛真题,开始自由锻炼的一个时期,已经可以考虑上场打acm了。
当你刷完算法提高课的时候,你所必须掌握的算法已经全部掌握,算法进阶课不过就是锦上添花,你刷完算法提高课,加上比较好的思维能力,已经具备拿牌的实力。算法进阶课涉及的大多数银牌、金牌算法,如果你有银牌、金牌目标的需求可以去爆刷一下算法进阶课。算法进阶课也并非全部刷完,数论和几何知识中的大多数算法属于暂时还开不到的题目(对于我来说是),算法进阶课我不推荐全部刷完(也不推荐购买,不推荐刷),当你刷完算法提高课的时候就准备思维上的训练。
我曾经在算法进阶课浪费了也算是很多很多时间,走了不少弯路,也是一种警示后人吧,接下来就是思维上的训练。
当你刷完算法提高课的时候,你已经具备了所有的所需算法。
我算法的原始积累用了一整个大一,大二时期有幸得到两位大佬的指点,myq(已授权)和zwz大佬,感谢他们在让我大二的弯路上走的少了许多。
洛谷是国内的oj,有许多中文题目,对刚入门的同学们来说是非常友好的练习网站。
当我刷完算法提高课的时候,我来到了洛谷去刷题,那个时期,我主要是以橙、绿、蓝为主,主要刷的题目大多都是来自于这个题单。
这个题单是典题的代表也是最常的出题方式,如果你要是想变强,这是一道必经之路,每一个算法都会有数道练习题 ,从简到难具有非常好的循循渐进的区分度 , 里面的很多题目比acwing的提高课更加典型更加值得一练 。
感谢zwz大佬对我的指导,让我真正认识了这个平台,然后我也因此熟悉了各个操作和流程,给学弟们少走弯路,写一篇文章给学弟们做个指导。
codeforce主页面
先说一下codeforces的几场比赛
div1 1900 + 以上的选手才有资格报名参加,题目难度很高,div1A = div2C以此类推。
div2 没有rating要求,2100不计rating , 是一个比较中档、友好的一场比赛,大部分同学都能出题。
div3 没有rating要求,1600不计rating , 相较于div2更加简单,题目更加典型,思维含量较低
div4 没有rating要求,是一个面向零基础(刚入门)都可以去做的一场比赛。
这些比赛是codeforce常见的比赛类型,其他比赛类型还有div1 + div2 , edu场。
codeforce的特点。
每道题目都会对应分数和tag,在每道题目的右下方的 p r o b l e m − t a g s problem-tags problem−tags能够看到
非常有利于筛选分数,筛选算法刷相关的题目
codeforces的 p r o b l e m s e t problemset problemset功能
在右方有一个 F i l t e r − P r o b l e m s Filter-Problems Filter−Problems功能
在这里你可以筛选题目和筛选分数啦!当你想刷某些难度,某些算法的题目,你可以快速从里面筛选出来,非常方便!
赛后补题方面
我们可以看到左下角有一个 E n t e r Enter Enter和 V i r t u a l − p a r t i c i p a t i o n Virtual-participation Virtual−participation按钮,其中 V i r t u a l − p a r t i c i p a t i o n Virtual-participation Virtual−participation按钮就是虚拟训练的一个按钮,我们也把这个常说成 v p vp vp,vp模式下,你可以高效地模拟当时的比赛情况(出题数,排名 按照时间推进),是一个非常有效,有用的训练模式。
右边你也可以看到你vp的场次
当 V i r t u a l − p a r t i c i p a t i o n Virtual-participation Virtual−participation开启组队模式时,可以从这里进入。
Gym功能 区域赛、新生选拔赛的真题演练
同样右边有一个 R e c e n t v i r t . c o n t e s t s Recent virt. contests Recentvirt.contests你可以从这里进入你vp的场次
当我们想vp某场区域赛的时候,我们可以从右边的搜索查询到相关比赛,然后找到对应的比赛,点击vj按钮,是组队训练的一个训练方式(比赛前一、二个月要一周两次vj) 。里面有近几年的区域赛真题和排名,也较好的模拟了当时的比赛情况,是高效训练的方式。
几句闲话:
当你想看别人打比赛的时候
红色按钮就可以看到朋友提交了。
关注方式:
五角星部分,黄色表示关注,灰色表示未关注。
牛客网站
牛客上有不少良心比赛
1.牛客小白月赛 对标cf div3
2.牛客练习赛 对标div3 - div2
3.牛客挑战赛 对标div1
小白月赛和练习赛是我推荐具有一定基础去爆刷的比赛,不一定只要打比赛,我们可以补以往的小白月赛和练习赛。
对于我来说,我几乎把所有的练习赛全部补了一遍,学到了很多东西和套路(没补f,大多数e) , 爆刷cf也可以达到同样的效果 。
寒假训练算法基础集训营 - 上分的最好利器(推荐程度五星) ,里面的题有非常多的好题,上分难度要比小白、练习赛简单。
暑期多校训练营 - 强烈推荐(推荐程度六星),打acm之前的准备工作,在这里你第一次接触到区域赛的难度,题目非常好,对标程度非常接近,而且会出现一些非常值得补题的算法,是打比赛的必刷的一个比赛 。
后面继续更新
学习的流程可以有两种:
我其实更推荐后者刷题,更适合acm的考查方式,也更锻炼思维,但是对个人的要求很高,大部分都是采取第一个方式去刷题。
1.补题的重要性
关于补题,赛时中未做出来的题目,赛后一定要及时去补,补题的重要性可能我没法描述出来。
一、只能从我身上讲一讲,当时大一时期我也不喜欢补题,我觉得做题只有比赛做出来才是真正做出来,但是随着比赛次数的增加,一些原来成绩在我下面的人反而一次一次的进步地更快了,通过跟他的沟通,他给我说他每场做不出来的题都会补,补题的重要性就在于把不会的做会。
二、再从我校的几个大佬讲一讲。
myq大佬的每场比赛都会补题,cf、牛客各种比赛都会补题。
下面是myq大佬的提交纪录可以看到myq大佬正在补题
2.以赛代练
当我们有一场缺席未打的比赛,我们赛后想去补题,我的建议最好是用 v p vp vp(不了解 v p vp vp的可以翻翻上文)。
比赛给人有一种紧迫感,可以让你高效的做题,而且vp的时候看不到分数和标签,还完全模拟了当时的排名和通过人数,让你对比赛有一个比较好的基础认知。
在把vp当成习惯之前,我对比赛是挺恐惧的,想着多练练几道题提升一下思维再打比赛吧,我觉得对于每一个新手来说都是正常的,毕竟打比赛就是直面失败,失败肯定不是每个人都想遇到的事情,但是打比赛的训练效果又不得不提,所以vp所达到的训练效果是难以用语言去描述的,我也是借鉴了某群的群友李哥的学习方式,用到自己身上感觉非常有效,我也想把这个方式写在这里。
关于组队比赛,同理。
总结:想最快提升实力的方式就是多打比赛。