【打破信息差】萌新认识与入门算法竞赛
阅前须知
XCPC萌新互助进步群2️⃣:174495261
博客主页:resot (关注resot谢谢喵)
针对具体问题,应当进行具体分析;并无放之四海而皆准的方法可适用于所有人。本人尊重并支持每位学习者对最佳学习路径的自主选择。本篇所列训练方法,仅为本人综合实践经验提出的相对合理方案,供参考。
本文仅涉及帮助萌新快速理解算法竞赛的常识,对于训练方面仅涉及整体的大方向。
(上面那一段是gpt生成的)
这篇文章其实有很大程度是我想到什么写什么,如果这篇文章有错误或者是后面又想到了什么,东西多了会写第二版本(在这个版本的基础上更新)
算法竞赛的一些常见缩写/黑话
缩写 | 全称(中文) | 简要说明 |
---|---|---|
ACM | Association for Computing Machinery(美国计算机协会) | 国际计算机领域最悠久的专业组织之一。早期 ICPC 以“ACM‑ICPC”冠名,因此“ACM”在华语社区常作为 ICPC 的口语简称。2018 年起 ICPC 独立运营,但“ACM”一词仍沿用。 |
ICPC | International Collegiate Programming Contest(国际大学生程序设计竞赛) | 面向在校本科生/研究生的团队式编程竞赛,被视为大学阶段最高级别赛事。区域赛(Regional)、全球总决赛(World Finals)两级赛制,三人一队,共用一台电脑,五小时内解题。 |
CF | Codeforces | 俄罗斯团队运营的在线评测与竞赛平台,以“Rating”体系闻名。常见赛事有 Round、Div.1/2/3、Educational Round 等,赛后可即时看到排名与官方题解。 |
AC / WA / TLE … | Accepted / Wrong Answer / Time Limit Exceeded 等判题结果 | 在线评测返回的常见状态码:AC 表示通过全部测试点;WA 输出错误;TLE 超时;MLE 超内存;RE 运行期错误;CE 编译错误等。 |
OJ | Online Judge(在线评测系统) | 广义名词,指提供自动评测服务的平台,如 POJ、HDU、洛谷、AtCoder、Codeforces、LeetCode 等。 |
IOI | International Olympiad in Informatics(国际信息学奥林匹克) | 中学生级别的全球顶尖信息学竞赛。各国通过本国选拔(如 NOI)确定代表队,个人赛制,两天各五小时,测试算法与实现能力。 |
NOI | National Olympiad in Informatics(中国全国青少年信息学奥林匹克竞赛) | 中国 IOI 选拔体系核心赛事,面向高中生。成绩优秀者可晋级 NOI 集训队,再经多轮选拔产生 IOI 国家队。 |
黑话 | 说明 |
---|---|
ap | a批,泛指打算法竞赛的选手 |
xcpc | icpc和ccpc的统称 |
封榜 | 一些赛事会在比赛结束前一个小时封榜,即榜单会停滞在结束前一个小时的状态 |
滚榜 | 因为封榜的存在所以大家无法直接得知最终排名,会在比赛结束后开滚榜环节,从后到前依次公布最终排名 |
vp | virtual participation,打一场在之前已经举办过的比赛 |
对拍 | 一种程序,很多时候不确定自己写的符合时空复杂度的代码是否正确,但是可以写出来一个复杂度爆炸但是绝对正确的暴力代码,对拍程序可以实现生成若干随机数据,然后比较两个程序在随机数据下是否输出答案一致,常见于oi类比赛 |
hack | 有时候虽然写了错误代码,但是侥幸通过了所有测试点,但是其他选手可以自己造数据来让你的代码无法通过题目,同时也是cf的特性之一 |
fst | failed system testing,cf的大多数比赛在赛时只评测一小部分的测试点,在赛后会统一评测所有的测试点,所以会有赛时通过了题目赛后发现其实没过的情况,这就称为fst |
spj | special judge,题目的评测方式,例如有些题目必须输出 YES 才能判断为正确,而对于spj无论 YES yes yEs 等都可以判断为正确,如果题目是spj的话一般会在题目的输出格式中说明 |
ak | 表示这场比赛的所有题目全部拿到满分 |
rp++ | 人品加一,用于表示祝福 |
bx | 拜谢 |
orz/or2 | orz看起来像一个人认输跪倒在地,or2的屁股更翘 |
tql | 太强了 |
%/膜 | 膜拜 |
浅谈XCPC
icpc和ccpc
比赛流程
比赛流程(以2024年上海区域赛为例)
不过最近开始出现热身赛和正式赛在同一天的情况了(以2025年南昌邀请赛为例)
比赛规则
(以2025年南昌邀请赛为例)第二条根据参赛队伍数量的不同而不同,但是获奖比例固定不变
比赛场地
一般是体育馆,如果特殊情况(主办方经费不足/参赛人数过多)会考虑选择机房,如果遗憾在机房参赛也希望大家可以给主办方谅解,因为举办比赛是非常不容易的事情
比赛语言
自2023年南京区域赛首次选择中文题面后,大多数的icpc和ccpc竞赛都开始为选手提供中文题面(在这之前全英文题面),当然如果是海外供题的话还是会只有英文题面就是了
比赛赠品
一般主办学校会为所有选手(包括打星队伍)提供免费的餐券和赛时午饭,也会为选手提供伴手礼(质量跟报名费有关系)
主办方
实际上举办一场xcpc大概率是会亏本的,而且举办xcpc十分消耗人力物力,所以希望大家可以给主办方尽可能地谅解
赛时
一般一场比赛有13道题目,如果你是全场第一个AC一道题目的话还会额外获得首杀奖励
xcpc还是相对宽松的,你可以带任意的书籍和纸质资料(当然电子类的资料是肯定不行的),也可以自己带饭零食什么的
在赛时因为是三个人只有一台机子,所以你可以选择先让志愿者帮忙打印出来代码去一旁想题
赛制
oi赛制
只能提交一次,赛后自动提交代价,可以获得部分分(即一道题满分一百,可以获得十分二十分的部分分),赛时无排名
应用比赛:csp-j/s,noi,蓝桥杯
acm赛制
可以无限次提交,以最后一次提交为准,但是每道题要么零分要么满分,无部分分得分,赛时有排名,如果得分相同,会根据罚时来进行升序排序。不过具体情况具体分析,例如codeforces中,每次提交错误/重复提交会扣掉一定的分数;在xcpc赛事中,每次提交错误会增加20分钟的罚时
应用比赛:icpc,ccpc,百度之星
ioi赛制
可以无限次提交,并且可以获得部分分,多次提交并不会有任何惩罚,分数以最后一次提交/最高分最准,最舒服的一个赛制
应用比赛:ioi,睿抗,天梯赛
多校
一般是指牛客多校和杭电多校
牛客多校
牛客暑期多校是面向准备参加ICPC/CCPC等算法竞赛选手的暑期训练营。内容包括10场线上比赛,赛后直播讲题以及社群交流学习。历年出题人包括NOI、IOI、ICPC world final 等顶级赛事的金牌选手。 旨在通过比赛、讲解、交流来提升同学们的编程能力,为下半年的比赛备战。并促进各高校集训队之间的学习和交流。
具体可看2025年暑假多校比赛页面:2025牛客暑期多校训练营1
另外因为之前多校有很多英文题,推荐使用这个插件来进行翻译:Nowcoder Better
杭电多校
杭电多校是杭州电子科技大学在杭电oj举办的多校联赛,不过我没打过杭电多校,具体可以直接去官网看看:https://acm.hdu.edu.cn/
正式队/打星队
正式队就是普通参赛队伍,在得到一定名次后可以获得对应的奖项
打星队比较特殊,简单来说是只参加比赛不参与评奖,所以可以让中小学生参与xcpc,或者是社会人士,或者跨校组队
正式队员的要求如下(以2024年ICPC杭州站为例)
省赛/邀请赛/区域赛
从含金量上说一般省赛 < 邀请赛 <<< 区域赛
当然也有例外,比如北京省赛的难度就非常非常高,含金量也会相应提高
省赛
名额一般是一个学校最高10/7个,几乎是点击就有,并且只能本省高校可以正是参赛,其余省份只能打星参与
如果省赛举办学校举办区域赛的话,也许会根据省赛成绩发放区域赛名额
邀请赛
全国高校都可以正式参赛,但是名额分配需要根据主办方的不同分配方式也不同,例如2025年西安邀请赛名额全根据报名顺序来发送,2025年南昌邀请赛会优先每学校至少一个名额来发送
因为想要参赛的队伍数量是远远超出赛场的容量的,所以名额非常宝贵
如果邀请赛赛举办学校举办区域赛的话,也许会根据省赛成绩发放区域赛名额
区域赛
区域赛之前会有网络赛,网路赛的成绩与名额关联度非常高,一般是icpc两场网络赛,ccpc一场网络赛。事实上网络赛打出来名额要比区域赛获奖难
这也是绝大多数选手最关键的比赛,大家说的acm金银铜牌/xcpc金银铜牌一般是默认说的是区域赛
名额分配
(以2024年上海站为例)
报名流程
(以2024年ICPC杭州站为例)
外卡
如果很遗憾网络赛失利,但这并不意味着你完全与区域赛无缘,一般来说每个主办方会有一些额外名额,这个额外名额就是外卡,如果你的理由能够足够打动主办方是可以获得外卡的。值得一提的是,如果是学校首次参加ccpc,那么大概率会获得一个ccpc区域赛外卡
竞赛相关网站
网站 | 简介 |
---|---|
codeforces.com/contests | 全球最活跃的算法竞赛平台 Codeforces 的比赛入口,实时榜单与互动社区一站齐全,简称cf。 |
cftracker.netlify.app/contests | Codeforces 已经举办过的比赛可视化追踪器,可以直观地看到自己做过哪些题与题目对应的难度。 |
luogu.com.cn | 国内大型 OI/XCPC 社区与题库,支持同步多平台题目与刷题统计,配有高质量文章区。 |
atcoder.jp/contests | 日本 AtCoder 官方比赛列表,每周六/日会有ABC, ARC等。 |
kenkoooo.com/atcoder#/table | AtCoder 题目难度与个人进度可视化工具,可以直观地看到自己做过哪些题与题目对应的难度。 |
oj.daimayuan.top/courses | 代码源 OJ 的系统化课程+评测,适合配套课程学习。 |
ac.nowcoder.com/acm/contest/vip-index | 牛客网竞赛中心,提供每周有周赛/月赛/练习赛/挑战赛,假期会有寒假训练营与暑假多校。 |
qoj.ac | QOJ 在线评测平台,汇集多校训练题与自定义题单,支持 SPJ。 |
ucup.ac/zh | UOJ 团队新平台 Ucup,很多XCPC的比赛都可以在这里参加。 |
leetcode.cn | 力扣中国站,面向面试算法题练习与周赛活动的主流平台。 |
vjudge.net | VJudge 虚拟判题系统,一站式提交多 OJ 题并可自建比赛,题库非常全。 |
acm.hdu.edu.cn | 杭电 OJ,老牌中文评测系统,题量丰富且经典,假期里会有杭电多校。 |
clist.by | Clist 全网竞赛日历,集中查看各大 OJ 比赛时间并可设置提醒,也可以用于查看比赛题目的难度。 |
oiwiki.org | OI Wiki 知识库,整理算法与数据结构入门到提高的中文资料。 |
icpc.global | ICPC 国际大学生程序设计竞赛官网,用于报名ICPC的比赛。 |
acmer.info | ACMer Info 聚合站,提供算法竞赛相关的信息与推荐群聊。 |
代码工具
实际上算法竞赛中对工具的要求极低,甚至一些网页的代码运行都足够了
小熊猫dev C++
如果是刚刚入门的选手那么我推荐你安装个小熊猫dev C++就够了,因为它的安装与运行十分简单
下载链接:小熊猫dev C++
下载完成后点击安装,所有过程无脑下一步即可
这里可以进行主题设置,我这里改了个自己喜欢的字体
安装完成后使用 ctrl + n
新建文件
写好代码后按 F11
便可以实现编译运行代码
vscode
如果你觉得dev已经无法满足你了,你需要更方便的插件/功能,你可以考虑vscode,具体教程可以见我之前的文章
【竞赛工具】——vscode xcpc竞赛向配置教程
sublime text4
sublime同样是轻量级的代码编辑器,并且也可以安装很多实用的插件,具体教程可以见我之前的文章
【竞赛工具】——sublime text4 xcpc竞赛向配置教程
clion
这个是我自己一直在用的IDE,现在好像也可以免费使用了,不过比较重量级,打开ide和运行代码要费一些时间,其他很完美,可以直接在官网下载
https://www.jetbrains.com/clion/
推荐的训练方法
总结为一句话:大量的去刷难度略高于自己能力的题目
刷题
下面会有非常详细的cf应用教程,当然还有牛客洛谷等网站也非常推荐去做题,不过现在时间有限(明天要去外地打比赛)就先只写cf的应用教程(因为是英文网站所以比较难懂,而牛客洛谷等主语言就是中文就非常友好),当然还有atcoder,这里由于时间原因也先暂时不写(如果有第二版的话会补上)
codeforces的题目偏向于思维,atcoder的题目偏向于典题,我个人是觉得刚入门的话只需要做到大量刷题即可,最好的话是去刷高于自己当前最大rating + 300难度的题目
非常推荐使用cftracker和atcoder problems这两个东西来做题
关于做自己最高分数+300的题目可以这样
codeforces
推荐插件:codeforces better
另外还有carrot,这个插件要在chrome的应用商店下载,这个插件可以赛时查看自己的表现分(自己当时的排名对标cf的多少rating)
接下来说明下codeforces最常用的几个情况,这里挑最关键的几个讲
home
contests
这里额外说一点,cf常见的比赛分为div1,div2,div3,div4, edu
类别 | 计分区域 | 备注 |
---|---|---|
div1 | 1900+ | 难度最高,一般A题是div2的C题 |
div2 | 如果同时举办div1: [0, 1900),如果单独举办div2:[0, 2100) | 最常举办的比赛 |
div3 | [0, 1600) | |
div4 | [0, 1400) | 最简单的比赛 |
edu | [0, 2100),一般对标div2 | 会出很多典题,比较教育选手 |
div1 + div2 | all |
contest
随意点进一个比赛中,这里也有很多页面,我们挨个儿说
gym
很多xcpc类的比赛可以在cf上vp,也就是在gym上找到相应的比赛去做
关于xcpc比赛还有牛客,洛谷,qoj,uccup等网站都会有比赛,因为有些比赛只会出现在某一个平台,想vp的话可以直接问群友在哪
problems
板刷cf一般就是指从这里筛选难度区间后开始刷题
随意点进一个题目的页面是这样的
个人主页
顺带讲一下cf的颜色分段
分段 | 段位 | 颜色 |
---|---|---|
[0, 1200) | newbie | 灰名 |
[1200, 1400) | pupil | 绿名 |
[1400, 1600) | specialist | 青名 |
[1600, 1900) | expert | 蓝名 |
[1900, 2100) | candidate master | 紫名 |
[2100, 2300) | master | 橙名 |
[2300, 2400) | international master | 黄名 |
[2400, 2600) | grandmaster | 红名 |
[2600, 3000) | international grandmaster | 红名 |
[3000, 4000) | legendary grandmaster | 黑红 |
4000+ | jiangly/tourist (以你的id命名!) | 红黑 |
学习算法
算法学习我其实觉得在刚接触算法竞赛的时候不需要急着学算法,这个阶段说不定会学到一大堆useless的算法,我觉得应该先大量刷题把算法思维训练出来,差不多cf1600分的时候在学习算法效率会非常高
还有个名言: Stop learning useless algorithms, go and solve some problems, learn how to use binary search.(停止学习用不到的算法,去刷题,学习怎么用二分)——Um_nik
这里我推荐牛客的网课,牛客的算法课程质量是很高的。另外还有代码源的课程,遗憾的是代码源的课程已经下架买不到了
此外学习算法也不一定必须看课,看上几篇博客再刷上几道题也是完全没问题的,可以在洛谷的题单中去搜索自己学习的算法,然后去刷题
刷题是非常重要的,一定要刷题!一定要刷题!一定要刷题!
学会交际
算法竞赛的圈子其实很小,很多时候都是一群相同的人在不同群里聊天
在算法竞赛中交际非常重要,自己写一道题可能要研究两三天(其实并不算罕见现象),而去向群友请教的话有可能一句话就能让你开悟理解这道题的思想
也可以喊上几个人一起vp,比自己单独vp会更有意思
结尾
现在时间2025/5/16 23:45,明天还要赶飞机去打南昌站,就先写这些,也许打完南昌回来会想到更多东西再开个第二版本
同时感谢萌新群的群友,有很多东西找群友讨灵感才有方向的,在此拜谢了or2