光刷题不参加这些算法竞赛?太亏了
最近有些学妹问我咱们计算机专业的有哪些比赛可以参加呢?我眉头一皱,想了想咱们计算机专业竞赛好像确实蛮多的,在这里给捋一捋。
竞赛的目的有很多,有的是为了参加竞赛提高个人能力,有的是为了拿到荣誉为自己保研、就业、考研加分,还有的是为了奖金。
竞赛的类型也有好多种,有算法类、工程类、科研类的,不同竞赛的难度不同、社会认可度不同。根据自身条件,选择合适的比赛参与历练自己,也算是拓宽自己的认识面,以后和人聊起来也能说上两嘴。
今天主要给大家介绍一些算法类竞赛。算法类竞赛大家听过或者接触的比较多,有些竞赛奖项的荣誉能够让自己终身受誉(不夸张),不过算法类竞赛一般都是荣誉型更多,奖金很少有。刷题的同时要看看有没有适合自己的比赛,用自己的能力拿个奖去证明一下自己的能力,有机会就要抓住争取,说不定以后就会对自己带来很大帮助!
下面会介绍一些赛制和比赛,在介绍比赛之前,先把一些专业术语搞清楚:
AC:Accept,通过
AK:All-Killed,AC了所有题
爆零:一题都没通过(一般赛前自嘲这次又要爆零了)
WA:Wrong Answer,答案错误
RE:Runtime Error,运行错误(通常是数组越界、爆栈了)
CE:Compilation Error,编译错误,即使很自信也要本地编译成功后再提交。
TLE:Time Limit Exceeded,时间超限(遇到的最大难题之一,可能是死循环了,也可能是算法复杂度太高需优化,算法复杂度和给定时间心中也要有个小数)
MLE:Memory Limit Exceeded,内存超限(通常是数组开大了,数组能开多大心里大概有个数)
PE:应该是格式错误?不太确定
OLE:Output Limit Exceeded,超出输出限制
UKE:Unknown Error,出现未知错误。
三大赛制
在介绍比赛之前,要先说一下赛制,其中ACM赛制要求是最高的,错一点整个题就不得分,所以每道题要采取适合的方法,而OI和IOI则是通过测试样例数量给分,如果题目不会最优解混部分分也可以得到不错的成绩(这也是暴力杯由来根本原因)。
ACM赛制:现场判题,每道题都有多个测试点,每道题必须通过了所有的测试点才算通过。不限制提交次数,但没通过的话会有罚时,仅以最后一次提交为准。比赛过程中一般可以看到实时排名,通过题数相同的情况下按照答题时间+罚时来排名。
ACM赛制的比赛:ICPC、CCPC、codeforces比赛、牛客小白赛练习赛挑战赛、传智杯等。
OI赛制:每道题提交之后都没有任何反馈,每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,仅以最后一次提交为准。比赛过程中看不到实时排名,赛后按照总得分来排名。
OI赛制的比赛:NOI全国青少年信息学奥林匹克竞赛、CCF CSP、蓝桥杯、牛客OI赛等等。
IOI赛制:现场判题,甚至可以实时看到自己每道题得了多少分,但看不到错误的测试样例。每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。每道题不限制提交次数,提交错误没有任何惩罚,仅以最后一次提交为准,按照总得分来排名。IOI赛制是结合了OI赛制和ACM赛制的特点。
IOI赛制的比赛:PAT、团体程序设计天梯赛、CCF CCSP、洛谷月赛。
ICPC
ICPC名气真是太大了,提起IPCP估计大家都知道:三人一队一个电脑,英文题目,五小时内A一道题挂一个气球……
国际大学生程序设计竞赛(英文全称:International Collegiate Programming Contest(简称ICPC)),这个比赛很久以来都是ACM赞助的,以前都叫ACM/ICPC,简称ACM,现在也依然大部分人把ICPC叫做ACM。但在2018年以后ACM(美国计算机协会)就不是ICPC的主要赞助了,后来JetBrains对其赞助,目前是AWS education、华为、JetBrains三家对其主要赞助。
而早期的图标也成为一个回忆了,那时候ACM、IMB都是金主赞助商。
这个比赛含金量是非常高的,即使近些年含金量有些下滑,但它依旧算法领域含金量最高的比赛,你经常看到某个算法课程的作者:xx,20xx年ACM亚洲xx区域赛金牌。一听金牌,大家就觉得:卧槽,大佬讲课,这个课程质量肯定稳了,买买买!
不过ICPC也有省赛,亚洲区域赛,亚洲决赛( EC-Final)和世界总决赛(World Finals),一般来说区域赛含金量还是比较受认可的,当然中国只有强校的队才能进World Finals。
对于普通同学的焦点来说都是国内的几场区域赛。ICPC的门槛比较高,每个学校一般有几只队伍,有的学校可能只有一两只队伍(每个队伍一年最多打两场区域赛),具体名额分配要看各个区域赛组织文件的,所以如果想参加ICPC光想还是没用的,还要自身实力够硬能够获得学校教练认可,让你组队训练给你名额。
如果你高中有IO竞赛经验或者大一比较喜欢算法刷题,那么强烈推荐努力尝试一波,但如果你目前都大二大三但是算法基础还是很差,那并不是建议你在这上花太多时间,如果结果只是打铁那花费那么多时间在这上其实还是有点不值当的,ICPC是属于算法精英的比赛而不是普通人的比赛。虽说学习算法很能提升个人能力,考研、就业也有很大帮助,但ICPC的难度通常远大于面试力扣、剑指offer,可以但没必要。
赛制:ACM赛制
题量:7到13个问题(编程题)
时长:5小时
编程语言:C/C++、Java和Python
奖项设置:金、银、铜奖的颁奖比例参加队数的 10%, 20% 和 30%,其余我们亲切的称为打铁。
大赛官网:https://icpc.global/
其他:一般本科,理论上研一最大年级,三人一队,A一道题自己多一个气球。
CCPC
中国大学生程序设计竞赛(China Collegiate Programming Contest, CCPC)这个比赛是中国的,很多人把它和ICPC弄混淆,它整体来说跟ICPC很像(赛制、规则),但CCPC的历史比较短,2015年才开始第一届所以有些院校还不太认这个比赛(甚至不报销),但目前赛制也很完善也得到大家认可。
想参加的话其实门槛目前来说跟ICPC有些类似,学校可以参加的名额一部分网络赛争取,一部分固定名额,还有其他承办、出题等等其他因素也会奖励一些名额,对于学生来说,当然也是只能先进校队才能有机会参加比赛了。
对于ICPC/CCPC如果自己还很年轻,并且自己有追求想参加的话,可以打听打听校队和自己院校情况,努力刷题打比赛参加学校程序设计大赛证明自己。
其规则和ICPC相似。
大赛官网:https://ccpc.io/
其他:只允许本科、专科
蓝桥杯
蓝桥杯大家可能更熟悉一些,因为可能很多人都参加过,它是一个比较亲民化的算法竞赛(这里就不说非点子类的了),蓝桥杯大赛是工业和信息化部人才交流中心举办。
蓝桥杯是个人赛,个人赛软件类分为:C/C++大学研究生组,C/C++大学A组,C/C++大学B组,C/C++大学C组,Java大学研究生组,Java大学A组,Java大学B组,Java大学C组,Python大学组共9个组别。研究生只能报研究生组。一本院校(985、211)本科生只能报大学A组以上组别。其它本科院校本科生可报大学B组及以上组别。其它高职、高专院校可自行选择报任意组别。每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。蓝桥杯的分组竞赛方式,让平时被“学霸”打压的普通学生,也能有获得感,有进步感,给更多学生指引了努力的方向。
在比赛的时候蓝桥杯是OI赛制,也就是提交答案之后赛后评判,根据通过的样例数量给分。这样的赛制,放宽了对于编程速度的要求,对于大部分选手来说更友好一点,可以更从容地解决问题,但也可能有些错误被疏忽不知道已经错了。
蓝桥杯报名的话有个人和院校两种,学校报名:自己注册,自己提交申请,选择学校报名,等待学校缴费(很多学校要让学生先交钱,获奖之后再报销的)。而自己报名的话就是自己完成一系列流程,但是有的学校不允许学生擅自个人报名要走学校通道的也要注意一下。
很多人对蓝桥杯的含金量看法不一,ACM大佬可能觉得这个比赛没啥含金量,但是不同人有不同的追求吧,没有ACM竞赛机会的蓝桥杯就是一个学习算法、证明自己的另一个非常好的方式。省赛的话确实含金量一般,省一才有资格进入国赛,拿了省一能证明你有两下子,在国赛如果能拿国一或者国二其实还是有含金量的。
赛制:OI赛制
题量:5道填空题+5道编程题,填空题一般也是需要编程求解答案,满分150分。
时长:4小时
编程语言:C/C++、Java和Python
奖项设置:
省赛:省赛每个组别设置一、二、三等奖,比例分别为10%、20%、30%,总比例为实际参赛人数的60%,零分卷不得奖。省赛一等奖选手获得直接进入全国总决赛资格。
国赛:个人赛根据相应组别分别设立一、二、三等奖及优秀奖。其中,一等奖不高于5%,二等奖占20%,三等奖不低于25%,优秀奖不超过50%。
国赛都是省一选手参加的,并且一二三等奖获奖比例更加苛刻,所以这个含金量还是有的。
大赛官网:https://dasai.lanqiao.cn/
其他:个人赛,需要注意分组自己所能报名的组别
天梯赛
天梯赛是个团体赛,每个队不超过10人,题目的话更亲民一些,难度分3个梯级:基础级、进阶级、登顶级。以个人独立竞技、团体计分的方式进行排名。
当然天梯赛奖项设置也比较多,这里就不进行详细介绍了,可以到官网去查看奖项设置,但很多学校算法氛围不是很浓厚或者没人带队没有队伍参加,这种有意思的赛制其实还是建议参加体验一下的,自己为团队奉献力量。
赛制:IOI赛制
题量:基础级设 8 道题,进阶级设 4 道题,登顶级设 3 道题。
时长:3小时
编程语言:C、C++ 和 Java。
奖项设置:竞赛的 3 个组别分别设置全国高校奖、全国团队奖、个人特等奖、个人优胜奖、特别奖、成功参赛奖;同时各省设置省内高校奖和团队奖。
大赛官网:https://gplt.patest.cn/teams
其他:需本科生或者专科生
CCF CSP认证
这个中国计算机学会组织的一个认证,毕竟中国计算机学会也是个像模像样的组织,拉拢了一些高校达成一些一致,高校有的保研加分、分数可以抵考研复试机试分数、研究生CSP分数可以评奖学金加分等等手段拉取一些报名参赛。
CCF CSP认证的局域性色彩很浓厚。如果你的学校对CCF CSP有要求或者你要报考的学校对CCF CSP有政策,那你一定得报名一波哇!
但是客观来说普及度和认可度,确实还不太行。
赛制:OI赛制
题量:5道题,都是编程题,近些年难度有所增加。
时长:4小时
编程语言:C/C++、Java和Python
奖项设置:分数排名,一般300分作为一个衡量点就不错了。500分满分的话很少每次只有少数几个人。
大赛官网:https://www.cspro.org/
其他:个人赛无分组,是否大学生都可参加,CSP成绩好的可以参加CCSP。
PAT
PAT: 这是浙大组织的比赛,目的我就不说了,通过一些校企合作让大家参加,不过承认的企业其实也不是很多。但是如果你考浙大那这PAT嘎嘎香啊,因为PAT的甲级分数可以直接抵浙大复试机试的分数。
不过就影响力来说,因为是浙大组织的比较偏民间化,并且组织时间也不是很长,认可度暂时还没那么高。还有一点PAT对Java选手不太友好,因为不管什么语言时间都是一样的(不像某些比赛Java二倍时间),所以面对大量数据的时候,记得不能用Scanner,要用BufferedReader等快速输入输出(自行搜索一下Java快速输入输出)。
赛制:IOI赛制
题量:顶级(英文,3题)、甲级(英文,4题)、乙级(中文,5题)。满分都是100分。
时长:4小时
编程语言:C/C++、Java和Python等多种语言,但Java等语言很慢,千万别用Scanner。
奖项设置:分数名次,甲级90分以上的话就不错了
大赛官网:https://www.patest.cn/
其他:个人无分组,是否大学生都可参加
其他
除了上面稍微大一点的,还有一些机构公司最近也开始组织比赛(例如传智播客)这些暂时就不列举了,还有一些其他网络赛比如百度之星(每年暑假)等,还有各个平台、学校开放自己的比赛就要自己去找啦(牛客周赛、力扣周赛、codeforce网络赛等等),不过在这里推荐一些刷题平台。当然OJ很多,这里简单列举一些大家熟知的。
杭电oj:http://acm.hdu.edu.cn/ 老牌oj,题量挺多,ACM选手刷题库
北大oj:http://poj.org/ 老老牌oj(jdk好像支持1.5……)
牛客竞赛:https://ac.nowcoder.com/acm/home 每周有很多周赛组织,非ACMer也可玩玩
Codeforces:http://codeforces.com/ 全球最大的竞赛平台,俄罗斯网站,有不同难度比赛,ACM选手网络赛
Atcoder:https://atcoder.jp/ 日本竞赛平台,ACM选手网络赛
计蒜客:https://nanti.jisuanke.com/oi/ 有些题库和比赛会在上举行
洛谷:https://www.luogu.com.cn/ 中学生打OI用的更多,也很适合算法初学者
vjudge:https://vjudge.z180.cn/ 整合一系列题目模拟组成题库(本质是个爬虫) 专题系列题目比较好
力扣:https://leetcode-cn.com/problemset/all/ 面向工作党强烈推荐,也有周赛
蓝桥杯练习系统:http://lx.lanqiao.cn/problemsets.page 适合刷蓝桥杯试题同志
PTA: https://pintia.cn/ PAT考题和天梯赛考题oj
不过刷题还是趁早比较好,如果发现自己有算法天赋可以考虑进阶打ICPC/CCPC比赛,拿个巨大的荣耀,如果算法天赋一般可以巩固学好基础数据结构与算法,参加蓝桥杯等比赛也能得心应手拿个好成绩,为自己简历添金,后面考研、找工作机试算法题也能超过大部分开发选手水平。但如果这方面起步很晚就可能把一些好的机会错过了。
结语
最后说一下,并不是所有算法竞赛都适合你,有些算法竞赛只是特定渠道认可度很高,并且报名费确实不菲(每年举行好几次的被喷圈钱是有原因的),所以如果有条件可以试一试ICPC/CCPC,如果没条件努力冲冲蓝桥杯总是可以的吧!如果想准备某个比赛,要自己更详细了解比赛时间、学校是否有相关安排、比赛题目风格等更加具体的信息,这里就不做那么详细的介绍啦!
当然,要是想借着比赛增加现场比赛经验、找自信、通过比赛学习进步不差钱的话也可报一些比赛,自己情愿就行。
加油冲冲冲,今天的算法竞赛就先介绍到这里,工程类比赛比较多也比较杂,后面有空的话可以给大家梳理一波。
最后问下,爆零和AK,你是那种选手呢?