Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 

Repository files navigation

【打破信息差】萌新认识与入门算法竞赛

祝愿每一位选手都可以在竞赛中享受一份纯粹的快乐。

阅前须知

关于本文

本文旨在为有志于了解与入门算法竞赛的大学新生及其他学习者提供一份较为系统的讲解与引导。

本文章首次完成于 2025年7月1日。

本文章最近一次更新于 2026年4月21日。

后续或有对内容的修正与补充,最新版内容请以GitHub版本为准。

作者:Resot

知乎主页:Resot

GitHub主页:【打破信息差】萌新认识与入门算法竞赛

博客wiki版本:AlgoWiki-竞赛Wiki

版权与使用声明

本文已在GitHub平台开源,欢迎大家通过提交Issues为本文做内容补充与完善。同时开放本文的非商业性转载权限,严禁将本文用于任何形式的商业用途。

核心目标

本文的核心目标是帮助初学者快速掌握算法竞赛的基础知识与核心常识,为顺利入门算法竞赛奠定坚实基础。

学习路径与方法论

针对具体问题需进行具体分析,不存在普适所有人的“放之四海而皆准”的学习方法。我们充分尊重并支持每位学习者根据自身情况,自主选择最适合自己的学习路径。本文所阐述的训练方法,系笔者基于过往实践经验提出的相对合理化方案,仅供各位学习者参考借鉴。

内容范围

本文内容侧重于帮助算法竞赛新手快速理解相关常识性知识,并对训练方向提供宏观指导。具体深入的训练细节,将不在本文范畴之内。

文章大纲

【打破信息差】萌新认识与入门算法竞赛-文章大纲

阅读索引

[TOC]

学术诚信

学术诚信在算法竞赛中更是重中之重,所以我将学术诚信放在了文章的第一个章节。

在算法竞赛的求索之路上,我们追求卓越的代码与精妙的算法,这固然重要。然而,超越所有荣誉与排名的,是对学术诚信的坚定秉持。每一次代码的提交,都应是独立思考的结晶,真实反映自身能力的提升。作弊行为不仅损害了竞赛的公平基石,更是对个人学习机会的自我剥夺。维护这一原则,方能赢得社区的尊重,并为未来的学术与职业生涯奠定坚实基础。

常见术语

缩写 全称(中文) 简要说明
ACM Association for Computing Machinery(美国计算机协会) 国际计算机领域最悠久的专业组织之一。早期 ICPC 以“ACM‑ICPC”冠名,因此“ACM”在华语社区常作为 ICPC 的口语简称。2018 年起 ICPC 独立运营,但“ACM”一词仍沿用。
ICPC International Collegiate Programming Contest(国际大学生程序设计竞赛) 面向在校本科生/研究生的团队式编程竞赛,被视为大学阶段最高级别赛事。区域赛(Regional)、全球总决赛(World Finals)两级赛制,三人一队,共用一台电脑,五小时内解题。
CCPC China Collegiate Programming Contest(中国大学生程序设计竞赛) 由中国高校计算机教育研究会主办的年度性大学生程序设计竞赛。旨在提高中国大学生的程序设计能力和计算机应用水平,是国内规模最大、影响力最广的大学生程序设计赛事之一。其赛事组织形式与ACM/ICPC相似。
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(在线评测系统) 一种自动化系统,用于接收、编译、运行参赛者提交的程序代码,并根据预设的测试数据和评测标准(如正确性、运行时间、内存占用)给出评测结果。它是算法竞赛的核心平台。
IOI International Olympiad in Informatics(国际信息学奥林匹克) 面向全球中学生的信息学竞赛,旨在发掘、鼓励和表彰世界各地在信息学方面有才能的青少年。通常侧重于算法设计、数据结构和数学思维。
NOI National Olympiad in Informatics(中国全国青少年信息学奥林匹克竞赛) 中国国内最高水平的青少年信息学竞赛。由中国计算机学会 (CCF) 主办,旨在选拔和培养优秀的计算机人才,并组建中国国家队参加IOI。
IDE Integrated Development Environment(集成开发环境) 软件开发中用于提供程序开发环境的应用程序。它通常包括源代码编辑器、编译器/解释器、调试器和构建自动化工具。在算法竞赛中,选手可以使用IDE编写、调试和测试代码。
黑话 说明
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 太强了 的简写。
%/膜 膜拜 的简写。
n+1,n+2 一般指一场比赛中自己做出了n道题,另一个人比自己多做出来1/2道题,就可以说被这个人n + 1/2了
吧唧 可以简单的理解为是以自己qq头像为样式的徽章,可以去定制这样的徽章后,在比赛赛场面基熟悉的群友时分发出去。
火车头 指写代码时,所用的头文件或常用的define与typedef等自定义语句很长很长,就像是一个火车头那样

阶段任务

前言

在除闭关修炼外的任何阶段,我都推荐先去根据acmer.info这个网站加一些算法竞赛的学术群聊,因为在算法竞赛的道路上闭门造车地学习我认为大多数情况都是比不过和群友共同进步的(请注意水群与训练的比例,不要让水群成为你训练的主体)。

本章节会多次提到参考本文的XX章节,大多数都在本文的关于训练部分。

另外本章节的所有内容都仅限个人认为,此章节并非对每个人来说是最正确的道路,甚至对部分选手来说也许是负面作用,所以请一定要有自己的主见,取其精华,去其糟粕,去找到最适合自己的训练的道路。

完全小白

你现在要做的第一件事是去找一个以算法竞赛为主的老师,然后去跟着课程一步步打好语法的基础,这很关键,当然如果社团内部有老师线下讲授的话也完全可以跟着自己社团的进度去学习。

如果完全没方向的选手可以试着看看以下几个付费课程:

  1. 牛客竞赛——语法入门班 99元
  2. acwing-语法基础课 单独报名100元,三人拼团69元
  3. 洛谷-深入浅出基础版 请注意这个是书,淘宝价59.5元

这里推荐几个题单:

  1. 牛客竞赛—0基础题单 新手入门130
  2. 洛谷—官方精选入门题单
  3. 作为1的补充,可以依据此日程表来作为自己训练的每日任务 63天零基础入门编程

虽然由我自己说可能显得有点无力,不过我确实完全没收任何广告费,就纯推荐。

请注意,在你付费或者跟着学习课程(包括上面的两个课程)之前,我推荐你先在各种群聊中询问群友的意见,群友的意见一般是不会错的。此外如果你当前在看的老师表达了只看他的课就够了,其他网站都不重要类似的言语,那么最好赶紧跑路。

与此同时,我个人推荐先安装小熊猫dev c++这个IDE,具体的安装教程在本文的代码工具章节,推荐的原因是安装简单且具备打算法竞赛的基础功能,其他的IDE因为安装和配置问题所以不推荐完全没接触过的选手使用。

有语法基础

那么你当前需要的是训练出算法思维,我并不反对现在就开始学习算法,但是我个人更推荐先打好思维的基础。具体地来说,我推荐你去做:

  1. CodeForces的problems中的难度在800-1000的题目
  2. AtCoder的ABC比赛的A,B,C三道题或者是难度等价的题目
  3. 其他网站比赛难度等价上述题目的题目

上述可以参考本文的关于训练中的推荐比赛部分和关键网站部分。

我知道现在的大家很希望能过学很多很多算法,做很多很多算法题,但是我更推荐先做一些题目,锻炼自己对题目的思考能力和见识一些题目的考法。在这之后学习算法时你会更加轻松地了解算法的原理和深刻地明白算法的作用。

有一定题量

这个时候我认为你已经具备了可以了解算法原理的水平了,可以参考文章的关于训练中的学习算法部分。

此时学算法我认为应该系统地学习一下基础算法了,这里可以跟着一些课程学习,也可以以算法路线和算法树为依照,然后去网上搜索相关算法博客和题目去进行学习。

最好结合多方面地去学习:不要只看一个视频或者一篇文章,直接翻出来四五篇去看是完全没问题的,因为博客本质上是每个人对算法理解的不同侧重点也会不一样,也许你看A写的博客看不懂看B写的就能看懂了。

此外依旧是要多做题,多做题会贯彻我们整个算法竞赛的生涯,不做题的训练方式我认为都是在瞎扯。这里的做题请参考本文的关于训练中的刷题章节。

另外在这个阶段开始,我觉得就应该要有着只要有比赛就没有不打的理由这样的想法。这里的比赛是指在本文的关于训练中的推荐比赛章节内写的五个比赛(如果有其他比赛的话根据自己的情况完全可以打)。

经历上述过程

这时候的你已经算得上一位专业的算法竞赛选手了,此时的你需要做的只有一件事——刷题

我们还没有学习很多很多高级的算法,但是我个人觉得不需要系统地学习,只需要在我们漫长的刷题的过程中,遇到了一个高级算法时,我们可以去学习这个算法的相关知识并且去刷一些和这个算法相关的题目了。

当然具体情况具体分析,如果想要更进一步,那么去系统地学习某一类算法我觉得也是完全没问题的,依照自己的情况即可

关于训练

对于除语法入门外的大多数阶段,总结为一句话:大量的去刷难度略高于自己能力的题目

刷题

切记不要听信某些平台说只看xxx课就可以了,所谓训练就是要大量的刷题,无论什么网站只要有适合自己的好题就要去做。

codeforces的题目偏向于思维,atcoder的题目偏向于典题,我个人是觉得刚入门的话只需要做到大量刷题即可,最好的话是去刷高于自己当前最大rating + 300难度的题目。

非常推荐使用cftracker和atcoder problems这两个东西来做题。

CFTracker-示例图

Atcoder Problems-示例图

关于做自己最高分数+300的题目可以这样

codeforces-problems-示例图

学习算法

算法学习我其实觉得在刚接触算法竞赛的时候不需要急着学算法,这个阶段说不定会学到一大堆useless的算法,我觉得应该先大量刷题把算法思维训练出来,差不多cf 1600分的时候在学习算法效率会非常高。

还有个名言: Stop learning useless algorithms, go and solve some problems, learn how to use binary search.(停止学习用不到的算法,去刷题,学习怎么用二分)——Um_nik

这里我推荐牛客的网课,牛客的算法课程质量是很高的。另外还有代码源的课程,遗憾的是代码源的课程已经下架买不到了。

此外学习算法也不一定必须看课,看上几篇博客再刷上几道题也是完全没问题的,可以在洛谷的题单中去搜索自己学习的算法,然后去刷题。

此外刷完题单其实并不意味着完全掌握了这个算法,因为刷题单是在你知道题单的题目是要用你现在要学的算法解决的前提下进行的,而事实上很多题目难就难在你要想到要用哪个算法。

刷题是非常重要的,一定要刷题!一定要刷题!一定要刷题!

码风

一个优秀的代码是离不开代码的阅读性这个话题的,如果一个代码写的难以阅读,不仅仅是折磨未来的自己,也是在自己需要他人帮助调式代码时折磨他人。

此外码风就想文字的书写一样千人千律,并没有一个绝对统一的好坏标准,所以只要能够起到很好的阅读效果的码风都是好码风。

但是鉴于刚接触编程的选手大概并没有码风注意的意识与好坏的标准,所以本文提供一份笔者认为比较合理的码风作为刚接触编程的选手的推荐码风。

下面给出一个一个反面教材

实际上在我带新生刚接触算竞时,经常有学弟学妹拿着一种类似于下面代码码风的代码问我怎么改,对于这种代码比起逻辑其实更大的难点在于阅读

void solve() {
int n,k;
std::cin >> n >> k;std::vector<int> a(n+1);
std::map<int, int> cnt,c;
for (int i = 1; i <= n; i++) std::cin>>a[i], cnt[a[i]] ++;
for (auto [x, y] : cnt) if (y % k) {
std::cout << "0\n";
return ;}c[a[1]] ++;
i64 ans = 0;
for (int l = 1, r = 1; l <= n; l ++) {
while (r + 1 <= n && c[a[r + 1]] + 1 <= cnt[a[r + 1]] / k) {
r++;c[a[r]] ++;}ans += r - l + 1;
c[a[l]]--;
}
std::cout << ans << '\n';}

而这个代码的原份是下面

void solve() {
    int n, k;
    std::cin >> n >> k;
    std::vector<int> a(n + 1);
    std::map<int, int> cnt, c;
    for (int i = 1; i <= n; i++) std::cin >> a[i], cnt[a[i]] ++;
	
    for (auto [x, y] : cnt) if (y % k) {
        std::cout << "0\n";
        return ;
    }

    c[a[1]] ++;
    i64 ans = 0;
    for (int l = 1, r = 1; l <= n; l ++) {
        while (r + 1 <= n && c[a[r + 1]] + 1 <= cnt[a[r + 1]] / k) {
            r ++;
            c[a[r]] ++;
        }

        ans += r - l + 1;
        c[a[l]] --;
    }
    std::cout << ans << '\n';
}

相信大家可以很明显的看出两种代码之间阅读性的差异

其实大家只需要记住不要吝啬自己的回车与空格这条,写出来的代码就很难有不可阅读性

写代码时会有很多可以分类的内容,比如有段代码是用来读入数据,有段代码是用来计算某部分的答案等,这样我们可以通过回车将他们分隔开,例如下面代码第六行的作用。这样子编写的好处是可以想写函数一样将代码各个部分分隔开,便于阅读与调试。还有很多细节,就以上面的代码为例,在加上注释用于讲解

void solve() {
    int n, k;
    std::cin >> n >> k;
    std::vector<int> a(n + 1);
    std::map<int, int> cnt, c;
    for (int i = 1; i <= n; i++) std::cin >> a[i], cnt[a[i]] ++;
	// 这里是一个回车,上面的代码都只是用来读入数据,所以上面就没有回车,下面是用来计算答案,两部分代码不是同一类功能,可以用回车来隔开
    for (auto [x, y] : cnt) if (y % k) {
        // y % k 可以写成y%k的,但是运算符间最好要用空格间隔
        std::cout << "0\n";
        return ;
    }

    c[a[1]] ++;
    i64 ans = 0;
    for (int l = 1, r = 1; l <= n; l ++) {
        // 可以写成for(int l=1,r=1;l<=n;l++),但是太过拥挤,也可以通过空格使得
        while (r + 1 <= n && c[a[r + 1]] + 1 <= cnt[a[r + 1]] / k) {
            r ++;
            c[a[r]] ++;
        }
        //循环可以写成while(条件) r++,c[a[r]]++;一行就能写完
        //但是不要吝啬自己的大括号,入门阶段不要省略任何大括号

        ans += r - l + 1;
        // 这里也可以是ans+=r-l+1,但是运算符间最好用空格间隔
        c[a[l]] --;
    }
    std::cout << ans << '\n';
}

请教问题

非常推荐看这篇文章:群里提问的艺术

简单来说:

  • 要有礼貌,毕竟没有任何一个群友有免费解答的义务。

  • 描述好自己的需求,是完全不懂思路,还是不理解某个部分的推导或是其他情况,请不要甩了个题目链接和代码就不说话了。

  • 在问问题时群友可能会要看你的代码来找bug,这个时候请不要直接把代码发到群里,首先会对群聊产生刷屏影响,其次有些大佬是用手机在帮忙找bug的,会非常不方便。所以正确的做法是去找云剪贴板,将代码粘贴到云剪贴板后生成链接,然后发送链接即可(可见本文章节 关键网站-洛谷-云剪贴板 部分)。

  • 并且一定要自己做过尽可能地尝试后再去请教问题,不要随便想了一下感觉不会就去问,无论是对自己的训练还是对群友的时间都是不好的影响。

推荐比赛

对于初入竞赛的选手们我推荐打以下比赛,并且赛后补题进行学习(除非ak,否则不补题相当于白打)

  1. Codeforces div2/3/4 不定期举办,一般时间是22:35
  2. Atcoder Beginner Contest 每周六20:00-21:40
  3. 牛客周赛/月赛 周赛每周日19:00-21:00;月赛一般每隔两周的周五19:00-21:00
  4. 洛谷入门赛 每月举行一次,时间19:00-21:00
  5. 代码源挑战赛 每周五20:00-21:00

算法路线与算法树

以下是代码源的dls和wls整理出的算法路线与算法树,我觉得以这个为标准去学习是完全没问题的。

学习路线

算法树

学会交际

算法竞赛的圈子其实很小,很多时候都是一群相同的人在不同的群里聊天。

在算法竞赛中交际非常重要,自己写一道题可能要研究两三天(其实并不算罕见现象),而去向群友请教的话有可能一句话就能让你开悟理解这道题的思想。

也可以喊上几个人一起vp,比自己单独vp会更有意思。

另外推荐给自己取一个简短的id,也方便群友记住你。

尊重他人

尊重他人是社交的基本要求,无论身处算法竞赛内外,我们都应时刻谨记。在竞赛中,开玩笑需有度,绝不能发展为人身攻击,应保持良性竞争氛围。

在日常交流中,请注意言语,避免无心之失被误解。例如,“我真是太菜了”这类自嘲,对于非竞赛选手而言,可能被误读为“凡尔赛”,即便本意并非如此。因此,请大家在表达时多加斟酌,避免引起歧义和不必要的误会。

竞赛概念

赛制

在算法竞赛领域,存在多种不同的比赛赛制,每种赛制在提交规则、得分方式、排名机制以及罚时计算等方面均有所差异。理解这些赛制对于参赛者制定策略至关重要。以下将详细介绍几种主流的算法竞赛赛制:

OI 赛制

OI 赛制是信息学奥林匹克竞赛中普遍采用的评测方式,其核心特点是注重解决方案的正确性和部分得分机制。

  • 提交机制: 通常允许选手对每道题目仅提交一次最终代码。在某些平台或比赛中,也可能允许有限次数的提交,但最终得分以赛后测试的结果为准。
  • 得分机制: 采用“部分分”制度。每道题目通常设定为满分100分,但在赛后评测时,即使程序未能完全通过所有测试用例,也可根据通过的测试点比例或特定条件获得相应的分数(例如,通过较小规模的测试点可获得20分,通过中等规模的测试点可获得60分等)。这意味着即使算法未能达到最优解,只要部分正确,也能获得分数。
  • 排名机制: 比赛过程中通常不提供实时排名,所有选手的最终得分和排名在比赛结束后统一公布。排名主要依据总得分进行降序排列。
  • 罚时规则: OI 赛制通常不设严格的罚时概念。即使多次提交,也不会像 ACM 赛制那样扣除额外时间或分数。分数以选手最终提交(或最后一次提交的最高分)在赛后评测中获得的成绩为准。
  • 应用比赛:
    • CSP-J/S (计算机软件能力认证入门级/提高级)
    • NOI (全国青少年信息学奥林匹克竞赛)
    • NOIP (全国青少年信息学奥林匹克联赛)
    • 蓝桥杯全国软件和信息技术专业人才大赛(部分组别/阶段)
    • 其他一些以培养算法思维和编程能力为导向的国内青少年或初级赛事。

ACM 赛制

ACM 赛制是国际大学生程序设计竞赛(ACM-ICPC)所采用的标准赛制,其特点是强调代码的“一次性正确性”和团队协作效率。

  • 提交机制: 允许选手对每道题目进行多次提交。但一旦某道题目的代码通过(Accepted),该题即视为解决,后续对该题的提交将不再计入有效成绩。
  • 得分机制: 采用“全有或全无”的评分原则。每道题目要么获得满分(通过所有测试用例),要么得零分(未能通过任何测试用例或存在错误)。不存在部分分。
  • 排名机制: 比赛期间通常提供实时排行榜。排名首先依据解决问题的数量进行降序排列(解决问题越多排名越靠前)。如果解决问题数量相同,则根据“罚时”进行升序排序(罚时越少排名越靠前)。
  • 罚时规则: 罚时是 ACM 赛制中一个关键的惩罚机制。
    • 每解决一道问题,其罚时等于从比赛开始到该问题首次正确提交所花费的时间。
    • 对于每道已尝试但未通过的题目(即提交了但获得 WA/TLE/MLE/RE/CE 等非 AC 结果的题目),通常会额外增加固定罚时(例如 20 分钟),无论提交了多少次错误,只计算在该题首次 AC 前的错误提交次数。
    • 最终总罚时是所有已解决问题罚时之和。
    • 特例说明:
      • Codeforces 等在线平台在 ACM 赛制比赛中,每次错误提交通常会扣除一定分数或增加罚时,具体规则会在比赛前公布。例如,常见的规则是每次错误提交增加 20 分钟罚时,并可能在最终分数中扣除少量积分。
      • CCPC (中国大学生程序设计竞赛) 等国内赛事通常遵循 ACM/ICPC 的标准罚时规则,即每次错误提交增加 20 分钟罚时。
  • 应用比赛:
    • ICPC (国际大学生程序设计竞赛) 及其各区域赛。
    • CCPC (中国大学生程序设计竞赛) 及其各分站赛。
    • 百度之星编程大赛
    • 其他众多团队编程竞赛和部分个人编程挑战赛。

IOI 赛制

IOI 赛制结合了 OI 赛制的部分得分特性与一定的提交自由度,旨在鼓励选手在保证正确性的前提下追求更高的效率和更优的解法。

  • 提交机制: 允许选手对每道题目进行多次提交,通常有提交次数限制(例如每道题 10 次提交)。
  • 得分机制: 采用部分分制度,与 OI 赛制类似,根据通过的测试点获得相应分数。
  • 排名机制: 比赛过程中通常不显示实时排名,或只显示部分排名信息。分数以选手对每道题的最后一次提交的得分(或历史提交中的最高得分)为准。
  • 罚时规则: IOI 赛制通常不设任何罚时惩罚。多次提交错误代码不会扣除时间或分数。这使得选手可以更加从容地调试和优化代码,直到达到最佳表现。
  • 应用比赛:
    • IOI (国际信息学奥林匹克竞赛)
    • 睿抗 (全国高校计算机能力挑战赛 - 部分赛项)
    • 天梯赛 (中国高校计算机大赛 - 天梯赛)
    • 某些在线平台或教育性质的比赛也可能采用类似的赛制,以降低选手的心理压力,鼓励尝试和探索。

队伍类型

在算法竞赛中,参赛队伍通常会根据其资格、组成或目的,被划分为不同的类型。理解这些分类有助于明确参赛目标和可获得的权益。以下将详细介绍几种主要的队伍类型:

正式队伍

正式参赛队伍是指符合赛事章程中所有资格要求、旨在参与正式排名并角逐奖项的常规队伍。

  • 参赛资格: 队员通常需满足特定的身份要求(如在校大学生、特定学年段学生),并符合年龄、学历、注册学校等规定。例如,在ICPC和CCPC中,正式队员通常要求为在校本科生或研究生,且未达到特定参赛次数上限。
  • 评奖资格: 仅正式参赛队伍有资格参与最终的排名评定,并根据其表现获得相应的奖项和荣誉。

下面分别以ICPC 2024年南京站为例

ICPC-2024年南京站正式队伍要求

打星队伍

打星队伍是一种特殊类型的参赛队伍,其主要特点是参与比赛但不参与正式排名和奖项的评定。这种机制旨在为特定群体提供参与竞赛的机会,同时不影响正式队伍的竞争格局。

  • 参赛性质: 打星队伍通常被视为“体验参赛”或“练习参赛”,其成绩通常会在比赛结果中单独标识(例如,排名前/后带有星号 *),不计入正式的榜单排名。
  • 参赛目的: 为不符合正式参赛资格但希望体验竞赛、提升技能、进行训练或作为指导的个人/团体提供平台。
  • 不参与评奖: 打星队伍无法获得比赛的任何正式奖项和荣誉(极个别赛站会为打星队伍发放奖牌)。
  • 常见构成:
    • 非在校学生: 如中小学生,他们可能在年龄或学历上不满足大学生竞赛的正式参赛要求。
    • 社会人士/在职人员: 已毕业或在企业工作的编程爱好者。
    • 指导教师/教练: 为了体验比赛或检验题目难度而组队参赛的教师。
    • 跨校组队: 在某些严格要求同校组队的比赛中,来自不同学校的选手若想共同参赛,可能需要以打星队身份报名。
    • 超出参赛次数限制的选手: 某些赛事对选手参赛次数有严格限制,超过限制的选手若仍想参与,可以作为打星队员。
    • 测试队伍: 组委会内部为了测试系统或题目而设立的队伍。
  • 示例: 在ICPC、CCPC等赛事中,经常可以看到一些由中学信息学奥赛选手、教练或校友组成的打星队伍。

女子队伍

女子队伍是指所有成员均为(个别比赛要求大多数)生理性别为女性的选手组成的队伍。在当前的算法竞赛环境中,设立女子队伍是为了鼓励更多女性参与编程和算法领域,并促进性别多样性。

  • 队伍构成: 队伍中所有队员必须均为生理性别为女性的选手。
  • 优待政策: 在许多重要的算法竞赛中,女子队伍会享有一些特殊的优待和鼓励政策,以体现对女性参赛者的支持:
    • 单独评奖: 很多比赛会设立专门的“最佳女子队伍奖”或“女子组奖项”,给予额外表彰,不与其他队伍混合排名。
    • 优先发放名额: 在一些晋级赛或名额有限的比赛中,女子队伍可能在名额分配上享有一定的优先权或额外名额。
    • 专属奖励: 除了荣誉之外,可能会有针对女子队伍的额外奖品或奖励。
  • 设立目的: 这些政策旨在弥补历史和现实中女性在STEM(科学、技术、工程、数学)领域参与度相对较低的现状,提供一个更具包容性和激励性的竞赛环境,吸引和培养更多女性编程人才。
  • 示例: 在ICPC世界总决赛、CCPC总决赛等顶级赛事中,均设有专门的女子队伍奖项和相关激励机制。

团体程序设计天梯赛为例

团体程序设计天梯赛-女队奖项

XCPC 比赛类别

XCPC是对包括ICPC、CCPC等在内的各类大学生程序设计竞赛的统称。这些比赛在层级、规模和含金量上有所区分,共同构成了大学生算法竞赛的生态体系。

从竞赛的普遍含金量和竞技水平角度来看,通常遵循以下层级关系:

省赛 < 邀请赛 ≪ 区域赛

当然,具体情况需具体分析,某些特定省份的省赛(例如:北京地区的省赛),因其较高的题目难度和激烈的竞争,其含金量和认可度也会相应提升。

此外,在更高层级还存在 CCPCF(CCPC总决赛)ECF(亚洲区总决赛,如ICPC亚洲区决赛)、以及全球最高级别的 WF(ICPC世界总决赛) 等赛事。这些比赛通常面向顶尖队伍,与初学者(萌新)的直接关联度较低,但它们是算法竞赛的终极目标。

以下将对主要比赛类别进行详细介绍:

省赛

省赛通常是各省份或直辖市内部举办的大学生程序设计竞赛,是许多高校队伍初次接触正式比赛的平台。

  • 参赛范围: 主要面向本省或本直辖市范围内的高校队伍。非本省高校的队伍通常只能以“打星队”身份参赛,不参与正式排名和奖项评定。
  • 名额分配: 省赛的名额通常比较充裕,多数情况下只要符合基本条件,报名即可获得参赛资格。这为新生和初级队伍提供了良好的入门机会。
  • 晋级关联: 如果省赛的主办学校同时也是某区域赛的承办方,该区域赛组委会可能会根据省赛的成绩表现,向参赛队伍发放部分区域赛的推荐名额或优先报名资格。

邀请赛

邀请赛通常由特定高校或机构主办,其参赛队伍范围更广,竞争也更为激烈。

  • 参赛范围: 全国范围内的各大高校队伍均可正式报名参赛。
  • 名额分配: 邀请赛的名额通常较为有限且宝贵,因为希望参赛的队伍数量往往远超赛场容量。根据各主办方规则进行发放。例如完全根据报名先后顺序发放,或优先保证每个学校至少有一个参赛名额进行发放等方式。
  • 晋级关联: 类似于省赛,如果邀请赛的主办学校也是区域赛的承办方,邀请赛的成绩也可能被用作发放区域赛推荐名额或优先报名资格的依据。

区域赛

区域赛是XCPC体系中承上启下的关键赛事,也是绝大多数参赛选手所追求的最高荣誉(如金、银、铜牌)的主要来源。

  • 赛事定位: 区域赛是晋级世界总决赛的必经之路。通常而言,大家所提及的“ACM金银铜牌”或“XCPC金银铜牌”,默认指的都是在区域赛中获得的奖项。
  • 网络赛: 区域赛之前通常会举行“网络选拔赛”(简称网络赛)。网络赛的成绩与区域赛的参赛名额关联度极高,是获得区域赛正式参赛资格的主要途径。
    • ICPC区域赛: 通常需要参加两场网络赛(例如:ICPC Online Round 1 和 Online Round 2),以其综合成绩决定晋级资格。
    • CCPC区域赛: 通常设置一场网络区预赛作为主要的选拔依据。
    • 难度: 事实上,由于网络赛面向全国范围内的队伍,且名额竞争激烈,在网络赛中打出晋级区域赛的名额,其难度往往不亚于甚至高于在区域赛中获奖。
名额分配

2024年南京站为例

2024年南京站名额分配

报名流程

2024年南京站为例

2024年南京站队伍注册

外卡

外卡机制为那些在网络赛中表现不佳但仍具备一定实力或特殊情况的队伍提供了额外进入区域赛的机会。

  • 获取方式: 区域赛的主办方通常会预留一定数量的“外卡名额”。如果某支队伍(通常是学校队伍)未能通过网络赛获得正式参赛资格,但具备充分且具有说服力的理由,可以向主办方提交外卡申请。
  • 申请理由: 合理的外卡申请理由可能包括:
    • 学校首次组队参加CCPC,且具备一定的培养潜力(例如,CCPC通常会优先考虑首次参赛学校的外卡申请)。
    • 队伍在其他大型比赛中表现突出,但因偶然因素在网络赛中失利。
    • 学校在算法竞赛领域投入较大,旨在推广和普及相关活动。
  • 申请结果: 外卡的最终发放由主办方根据实际情况和申请理由的充分性进行综合评估和决定。获得外卡通常意味着获得了正式参赛资格。

比赛介绍

XCPC

比赛流程

2024年上海站为例

2024年上海站日程表

也存在热身赛和正式赛在同一天的情况。

以2025年南昌邀请赛为例

2025年南昌邀请赛日程表

比赛规则

以2025年山东省赛为例

2025年山东省赛比赛规则

奖项设置

以2025年山东省赛为例

2025年山东省赛奖项设置

比赛场地

竞赛场地通常选择具备充足空间和完善电力、网络基础设施的场所。

  • 标准配置: 大多数大型XCPC赛事会选择体育馆作为主要比赛场地,因为体育馆通常空间开阔,便于容纳大量参赛队伍,并提供相对舒适的比赛环境。
  • 特殊情况: 在某些特定情况下,例如主办方经费受限、参赛人数远超预期或受场地可用性限制时,比赛可能会考虑选择高校机房作为场地。
  • 理解与支持: 无论比赛场地如何,组织一场大规模的算法竞赛涉及巨大的人力、物力和财力投入。主办方在筹备过程中面临诸多挑战,可能存在难以预见的困难。因此,恳请各位参赛者对主办方的努力给予充分的理解与支持,共同维护良好的竞赛氛围。

比赛语言

目前绝大多数比赛都使用以中文为主的题面,个别赛站会选择使用英文题目

  • 趋势变化:2022年ICPC南京区域赛首次尝试提供中文题面以来,国内的ICPC和CCPC区域赛已普遍开始为参赛选手提供中文与英文双语题面。这一举措极大地方便了国内选手,降低了语言障碍。
  • 例外情况: 若比赛采用海外(非中国大陆)提供的题目,仍可能仅提供英文题面。因此,参赛选手仍需具备一定的英文阅读能力,以应对可能的纯英文题目。

比赛赠品

主办方通常会为参赛选手提供一定的福利和纪念品,以提升参赛体验。

  • 餐饮服务: 一般而言,主办学校会为所有参赛选手(包括打星队伍)提供免费的餐券或赛时午餐,确保选手在比赛期间的餐饮需求。
  • 伴手礼: 参赛选手还会收到主办方提供的伴手礼。礼品的种类和质量通常与比赛的报名费用以及主办方的投入水平相关。

比赛用品

除了必要的编程工具,参赛选手需要准备一些个人物品以应对比赛需求。

  • 必备证件: 身份证学生证是参加比赛的必备身份证明,请务必随身携带并妥善保管。
  • 建议携带物品: 个人习惯不同,但通常建议携带:
    • 纸笔: 尽管赛场通常会提供草稿纸和笔,但携带个人习惯使用的纸笔可以提升思考效率。
    • 饮用水/零食: 赛场一般会提供饮用水,但可根据个人喜好携带零食或饮料,以补充能量。
    • 笔记本电脑: 用于比赛前后加训,提升竞技状态。
    • 个性化纪念品: 例如徽章(吧唧),可在赛后用于与群友面基交流,作为小纪念品。
    • 换洗衣服、洗漱用品: 若比赛持续多日或涉及住宿,则需准备。

主办方方面

举办一场XCPC赛事是一项极其复杂且耗费巨大的工程。

  • 成本压力: 赛事组织涉及场地租赁、设备调试、网络搭建、题目准备、评测系统维护、志愿者招募培训、餐饮住宿安排、奖品采购等诸多环节,大概率会有亏损的情况。
  • 人力物力消耗: 需要投入大量的人力资源(包括志愿者、技术人员、管理人员)和物力资源(服务器、网络设备、电脑等)。
  • 理解与感谢: 鉴于主办方为推动算法竞赛发展所付出的巨大努力和牺牲,恳请所有参赛者在享受比赛的同时,对主办方可能存在的不足之处给予充分的理解和包容,并对其辛勤付出致以诚挚的感谢。

赛时策略与注意事项

比赛期间的决策和应变能力对团队成绩至关重要。

  • 题目数量与首杀: 一场XCPC比赛通常包含约10至13道题目。如果团队是全场第一个成功通过(AC)某道题目的队伍,通常会获得额外的“首杀(First Blood)”奖励,这是对团队快速解题能力的肯定。
  • 允许携带资料: XCPC赛制相对宽松,通常允许选手携带任意书籍和纸质资料(例如算法教材、手写笔记、模板代码打印件等)。但严禁携带任何电子设备和电子资料进入比赛区。
  • 餐饮与休息: 允许选手携带个人食物和零食进入比赛区域,以便在比赛中随时补充能量。
  • 代码打印与思考: 由于每支队伍只有一台比赛用电脑,为了最大化团队效率,选手可以请现场志愿者协助打印代码。队员可以拿着打印出的代码或题目到休息区或非比赛电脑区域进行思考、讨论和调试,从而实现“三个人同时工作”的状态。
  • “榜歪了”现象: 在比赛中,有时强队会意外地快速解决一道被普遍认为是难题的题目,导致排行榜上这道题目的通过人数迅速增加。这可能会给其他队伍造成“这道题其实不难”的错觉,从而引诱大家尝试,导致时间和罚时的浪费。这种现象通常被称为“榜歪了”。

团队协作与队友选择

XCPC赛事的核心是三人团队协作。一个高效的团队远超个人能力的总和。

  • 团队的重要性: 尽管每年都会出现出几位“传奇单挑王”(即一人解决大部分甚至全部问题),但对于绝大多数队伍而言,团队协作是取得好成绩的关键。理想的组队应追求1 + 1 + 1 > 3的效果。
  • 队友选择与培养:
    • 共同训练与进步: 团队成员应尽可能做到共同训练,共同进步。这意味着队员之间要互相督促、交流学习经验,共同克服难关。
    • 避免无效队友: 如果队友长期不训练且无法在比赛中发挥应有作用,这不仅会影响团队的比赛成绩,更可能对其他队员的训练心态造成负面影响。在这种情况下,重新评估队伍组成是必要的。(该t就t,别心软)
  • 方向分工: 为了更有效地提升团队整体实力和覆盖知识点,建议团队成员进行方向分工,每个人选择两到三个算法或数据结构方向进行专精学习。
    • 示例分工: 假设团队有A、B、C三名成员:
      • A:可专攻数学计算几何
      • B:可专攻图论数据结构
      • C:可专攻字符串动态规划
    • 并非绝对专精: 所谓“专精”并非指其他方向完全不学。相反,团队成员仍需对所有常见算法和数据结构有基本了解。专精的目的是确保在比赛中,对于任何一个考点,团队中至少有一人能够深入理解并具备解决能力,从而形成高效的知识互补体系。这种分工有助于分担学习任务量,更有效地增强团队的整体竞争力。

多校

一般是指牛客多校和杭电多校,时间在暑假假期,很多往年区域赛出题人也会来多校出题,所以对于参加区域赛的选手来说,参与多校的训练是非常合适的

牛客多校

对于志在ICPC、CCPC等顶级算法竞赛并寻求系统性提升的选手而言,“牛客暑期多校训练营”是每年夏季不可或缺的高质量集训项目。该训练营旨在通过高强度、高水平的实战训练,全面提升参赛选手的算法设计、编程实现及团队协作能力,为下半年的正式比赛赛季奠定坚实基础。

牛客暑期多校训练营(通常简称“多校”)是一个面向全国高校,特别是各校集训队和高水平算法竞赛选手的暑期专项训练项目。它模拟正式比赛的节奏和强度,提供了一个持续、密集的练习平台。

  • 核心内容:

    • 高强度线上比赛: 训练营通常包含10场线上模拟竞赛。这些比赛严格遵循ACM赛制,全面考验选手的应变能力和团队配合。
    • 赛后直播讲题: 每场比赛结束后,专业的讲师会进行详细的题目解析和代码讲解,帮助选手深入理解各类算法思想和解题技巧。
    • 活跃社群交流: 训练营内设有专属社群,鼓励参赛选手和各高校集训队之间进行技术交流、经验分享和问题讨论,共同营造积极的学习氛围。
  • 出题团队: 历年多校的题目均由金牌选手或资深团队精心设计,确保题目的高质量、多样性和前沿性,紧密贴合实际比赛的风格和难度。

  • 训练目标:

    • 通过密集的实战训练,显著提升选手的编程能力、算法应用能力和心理素质。
    • 帮助参赛队伍提前适应正式比赛的节奏、压力和协作模式。
    • 促进各高校集训队之间的学习与交流,共同进步。
    • 为选手备战下半年ICPC、CCPC等正式区域赛及总决赛提供坚实的基础。
  • 官方页面: 您可以通过访问2025牛客暑期多校训练营1官方页面获取最新的赛事安排、报名信息和详细介绍。

  • 语言辅助: 从2025年起牛客多校将提供中文题面pdf。鉴于过往多校比赛中曾出现较多英文题目,为提升阅读效率,推荐使用如Nowcoder Better等浏览器插件进行辅助翻译。这将有助于选手更快地理解题意,将精力集中在算法设计本身。

牛客暑期多校训练营已成为国内算法竞赛训练的重要组成部分,其专业性和实战价值获得了广泛认可。对于有志于在算法竞赛领域取得突破的队伍和个人,积极参与此类训练营将是提升自身竞争力的有效途径。

杭电多校

2025 杭州电子科技大学暑期大学生算法设计联合训练营(杭电多校)旨在通过高强度、体系化的训练,帮助参赛队伍查缺补漏、磨合战术,并促进各高校集训队之间的学习与交流。

训练营的题目难度和形式均对标XCPC正式比赛(即ICPC和CCPC区域赛水平),尤其适合已具备一定算法基础、并有明确参赛目标的人群。前提条件是参赛者需已熟练掌握搜索、动态规划(DP)等核心算法思想。主要受众为准备参加下半年ICPC和CCPC等算法竞赛的在校大学生,以及在NOIP或CSP-S等全国性信息学竞赛中达到一定水平的优秀中学生,对他们冲击NOI等重要赛事有积极助益。鉴于其对标XCPC正式比赛的难度,本训练营将为有志于冲击ICPC World Finals等顶级赛事金牌的强队提供极具价值的实战训练

首场比赛定于2025年7月18日(星期五)正式开启。训练营共包含10场比赛,每周五12:00 - 17:00 (GMT+8)进行。

比赛采用团队参赛模式,每支队伍共享1个账号,支持3名队员同时登录。赛制为经典的ACM赛制,比赛期间提供实时反馈,且题目采用全有或全无的评分机制,不设部分分数。每场比赛将提供12道原创题目,且题目顺序不按难度排序,考验队伍的题目分析和筛选能力。为确保比赛的透明度和公平性,训练营将严格执行不封榜策略,所有队伍的实时提交和排名在比赛全程可见。比赛平台为HDOJ

赛题描述语言将提供中文版本,方便国内选手理解题意。题目难度将对标XCPC正式比赛(ICPC和CCPC区域赛的难度水平),确保训练的实战性。赛题将力求考察全面的知识点,涵盖算法、数据结构、数学等多个方面,并具备良好的区分度,能够有效区分不同水平的参赛队伍。

参赛费用为每支队伍600元人民币。成功报名并缴费的队伍将获得参加训练营全部10场比赛的权利。同时,参赛队伍还将共享全套训练资料,包括题目、测试数据、标准代码及详细解题报告。所有比赛结束后将统一提供测试数据,其他资料(题目、标程、解题报告)也会在所有比赛结束后统一提供,以便选手进行回顾和学习。

蓝桥杯

比赛介绍

详细的可以见蓝桥杯大赛章程

为贯彻落实全国新型工业化推进大会和全国教育大会有关精神,进一步提高学生工程实践和就业能力,推动产教融合,为制造强国和网络强国建设提供人才服务支撑,工业和信息化部人才交流中心决定举办第十六届蓝桥杯全国软件和信息技术专业人才大赛(以下简称大赛)。大赛分为高等教育组和青少组,高等教育组连续5年入选中国高等教育学会《全国普通高校大学生竞赛分析报告》竞赛目录,青少组进入教育部“2022-2025学年面向中小学生的全国性竞赛活动名单”。现将第十六届蓝桥杯大赛高等教育组章程公布如下。大赛官方网站:dasai.lanqiao.cn。

蓝桥杯大赛采用 OI 赛制,即所有题目仅根据最后一次提交判分,且分数需在赛后统一公布。省赛成绩通常在两周后发布,每道题目可获得部分分。我们通常参加的类别是软件赛

蓝桥杯分为研究生组、A组、B组和C组。

  • A组 面向985/211高校在校生。

  • B组 面向其他高校在校生。

  • C组 面向专科在校生。

    参赛者可以向上报名(如C组可报A组),但不可向下报名(如A组不能参加B组)。

蓝桥杯省赛通常在每年的 四月 举行,国赛则在 六月 举行。

  • 省赛 为线上形式,通常需前往承办赛点学校参赛。
  • 国赛 一般在每个省的一两个赛点学校线下进行。国赛成绩公布较快,通常在一两天至一周内。国赛选手会获赠蓝桥杯T恤,国赛一等奖获得者还将有额外礼品。

省赛获奖比例为:10%一等奖(晋级国赛),20%二等奖,30%三等奖,40%优秀奖。四个组别独立评奖。

国赛获奖比例为:5%一等奖,20%二等奖,35%三等奖,40%优秀奖。

主页

蓝桥杯主页

蓝桥杯主页

个人主页

一般用于查询比赛信息和下载证书

蓝桥杯个人主页

报名参赛

报名参赛1

报名参赛2

一般院校都会组织报名,学生需要做的是完成实名认证,填写报名信息和报名缴费(学校给缴费的话当我没说)

这里因为写博客的时候已经报名截止了,所以没办法继续截图,不过流程不难顺着引导即可完成报名

团体程序设计天梯赛

团体程序设计天梯赛

天梯赛(中国高校计算机大赛 - 天梯赛)是一项面向高校学生的算法竞赛,其赛制和组织方式具有鲜明特点:

  • 赛制与形式: 天梯赛采用 IOI 赛制,允许有限次数提交并可获得部分分,无罚时惩罚,最终成绩以最高分为准。比赛形式为线上竞赛,并辅以 双机位监考(通过OMS系统进行),赛时通常为三小时且中途不允许上厕所。

  • 组队与奖项: 比赛采用组队赛制,每支队伍最多可由十人组成。奖项设置上,既有个人奖项也有团队奖项,其中个人奖项的评选需满足分数大于等于175分的要求。

  • 竞赛分组: 比赛根据参赛学生的学历背景分为三个组别:

    • 珠峰争鼎(本科组)

    • 华山论剑(本科组)

    • 沧海竞舟(专科组)

      通常情况下,珠峰争鼎组的竞争最为激烈。

更详细的规则请参阅大赛官方主页上的竞赛规程。

主页

天梯赛主页

报名

天梯赛报名规则

如果在这之前你的学校从来没有参与过,那么报名首先你需要申请教练账号,按照下图申请即可

天梯赛报名页面1

天梯赛报名页面2

关于报名费用问题可见下图

天梯赛报名费用

百度之星

百度之星

百度之星程序设计大赛是一项具有较高知名度和影响力的算法竞赛,其赛制特点使其成为衡量选手个人编程竞技水平的重要平台之一。

  • 赛制特点: 百度之星采用个人ACM赛制,比赛时长通常为三个小时。这意味着选手需在规定时间内独立完成题目,并遵循ACM赛制规则,如实时反馈、无部分分、以及累计罚时等。
  • 竞赛价值: 获得百度之星国赛奖项具有较高的含金量。由于其个人ACM赛制的特点,百度之星能够相对直观地体现参赛选手的个人竞赛水平,是检验和提升个人算法能力的重要舞台。

主页

百度之星主页

报名

主页下拉找到下图

百度之星报名1

点击想要报名的场次进入到下图页面,点击红框按钮完善信息与缴费即可完成报名

百度之星报名2

关键网站

网站介绍

网站 简介
codeforces.com/contests 简称cf。全球最活跃的算法竞赛平台 Codeforces ,也是目前算法竞赛训练的主要平台。
cftracker.netlify.app/contests Codeforces 已经举办过的比赛可视化追踪器,可以直观地看到自己做过哪些题与题目对应的难度。
luogu.com.cn 国内大型 OI/XCPC 社区与题库,支持同步多平台题目与刷题统计,配有高质量文章区。
ac.nowcoder.com/acm/contest/vip-index 牛客网竞赛中心,提供每周有周赛/月赛/练习赛/挑战赛,假期会有寒假训练营与暑假多校。
nowcodertracker 牛客网题目可视化追踪器,此外包含ranking和打卡活动等内容
qoj.ac 收录国内外知名比赛、训练营与训练活动的大型算法题库,尤其是中国 ICPC 与 CCPC 区域赛题目最为齐全,并独家整理了许多高质量但传播度不广的试题集。是全球众多 IOI 和 ICPC World Finals 选手的核心训练平台。
ucup.ac/zh Universal Cup 是一个 2023 年创办的主要面向算法竞赛爱好者的公益组织,致力于提供高质量的实战演练,举办面向全球顶尖选手的线下赛事, 目标建立起横跨工业界、学术界、竞赛界的沟通桥梁,打造超越国界、超越年龄的紧密社区。 在上个赛季的线上训练中,来自全球 500 多个组织的 900 多支队伍注册并参加了总共 28 个阶段的比赛,这些比赛来自亚洲、欧洲和美洲。
atcoder.jp/contests 日本 AtCoder 官方比赛列表,每周六/日会有ABC, ARC比赛等。同样是全球知名算法竞赛平台。ABC是训练的重要比赛之一。
kenkoooo.com/atcoder#/table AtCoder 题目难度与个人进度可视化工具,可以直观地看到自己做过哪些题与题目对应的难度。
oj.daimayuan.top/courses 代码源 OJ 的系统化课程+评测,适合配套课程学习。
leetcode.cn 力扣中国站,面向面试算法题练习与周赛活动的主流平台。
vjudge.net Virtual Judge是一个独特的在线平台,允许用户从包括POJ、ZOJ、UVA、CodeForces等在内的众多标准在线评测系统中获取问题。它能够模拟提交并接收评测结果,极大地方便了用户组织各种编程竞赛,即使在没有现成测试数据的情况下也能进行。
acm.hdu.edu.cn 杭州电子科技大学在线判题系统(HDOJ),暑假期间会举办杭电多校,通过该网站参与多校。
clist.by Clist.by是一个全球性的编程竞赛日程聚合网站。它收集并整合了来自Codeforces、AtCoder、Google Contests等多个平台的即将到来和正在进行的编程比赛信息。
yuantiji.ac 原题机,可以将题面放到原题机搜索,就可以找到题面的出处或者是题面相似的题目。一般用来检查新创作的一道题是不是新题。
oiwiki.org OI Wiki是一个开放、协作、专业的算法竞赛知识库。它涵盖了从基础到进阶的各种算法、数据结构、数学等信息学奥赛相关知识,是学习算法竞赛理论知识和解题技巧的宝贵资源。该网站致力于为算法竞赛爱好者提供全面、准确的学习资料和参考指南。
icpc.global ICPC 国际大学生程序设计竞赛官网,用于报名ICPC的比赛。
acmer.info acmer.info被认为是为ACM/ICPC(国际大学生程序设计竞赛)爱好者提供信息和交流的平台。它经验分享以及社区讨论等内容,旨在为参赛者提供一个互相学习和共同进步的社区环境。
xcpcboard xcpcboard是一个用于展示XCPC(中国大学生程序设计竞赛)实时排行榜的平台。
cpcfinder 由代码源开发,可以通过姓名/学校来查询个人/学校的获奖情况。
icpc.pku.edu.cn icpc北京总部,是非常重要的信息网站,用于查看ICPC比赛通知/信息。
cpc duel 双方各自组成 1~3 人的队伍,之后在随机生成的若干道题目上对决,在原 OJ(目前仅支持 CF)上通过题目后可以点<判题>赢得该题目,每题率先通过的队伍获得对应的分数,率先得到总分一半的队伍获胜。
AlgoCard 通过点击的方式选中自己已经学会的算法,该网站可根据层次或算法类型进行分类选择,选中后可导出图片或pdf用于给自己或他人表明当前会/不会哪些算法

GitHub项目

名称 简介 链接
OI-wiki OI Wiki 致力于成为一个免费开放且持续更新的知识整合站点,大家可以在这里获取关于 编程竞赛 (competitive programming) 有趣又实用的知识,我们为大家准备了竞赛中的基础知识、常见题型、解题思路以及常用工具等内容,帮助大家更快速深入地学习编程竞赛。 https://github.com/OI-wiki/OI-wiki
testlib 用于出题时可以生成相当合理的数据。 https://github.com/MikeMirzayanov/testlib
domjudge Domjudge是一个用于参加编程比赛的系统,例如ICPC地区和世界冠军节目竞赛。 https://github.com/DOMjudge/domjudge
competitive-companion 一个浏览器扩展程序,从各种在线法官(例如ATCODER和CODEFORCES)解析竞争性编程问题,并将其发送到各种工具(例如CP编辑器和CPH)。能够解析问题和竞争并提取示例测试估计以及时间和内存约束之类的数据。 https://github.com/jmerle/competitive-companion
AtCoderProblems ATCODER问题是一个Web应用程序,可帮助ATCODER用户解决问题并更有效地管理进度。 https://github.com/kenkoooo/AtCoderProblems
xcpcio 收录了各个cpc比赛的榜单,以及赛时可以通过该项目看比赛外榜。 https://github.com/xcpcio/xcpcio
acmer-info acmer的信息收录站,收录了相当实用的信息。 https://github.com/acmerindex/acmer-info
xcpc-tools 提供了举办XCPC比赛的实用功能的工具。 https://github.com/hydro-dev/xcpc-tools
Hydro Hydro - Next generation high performance online-judge platform - 新一代高效强大的信息学在线测评系统。 https://github.com/hydro-dev/Hydro

codeforces

推荐插件:codeforces better

另外还有carrot,这个插件要在chrome的应用商店下载,这个插件可以赛时查看自己的表现分(自己当时的排名对标cf的多少rating)

Carrot插件

接下来说明下codeforces最常用的几个情况,这里挑最关键的几个讲

home

codeforces-home

contests

codeforces-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
Codeforces Div3/4 & Educational Div2 为 ACM 赛制
Codeforces Div1/2/1+2 为基于 ACM 赛制的 CF 赛制,其核心要点为题目具有初始分值,随比赛时间进行流逝,错误提交由罚时 20 分钟改为罚分 50 ,以积分进行排行。

contest

随意点进一个比赛中,这里也有很多页面,我们挨个儿说

codeforces-contest-problems

codeforces-contest-submit code

codeforces-contest-my submissions

codeforces-contest-status

codeforces-contest-hacks

codeforces-contest-room

codeforces-contest-standings

codeforces-contest-custom invocation

gym

很多xcpc类的比赛可以在cf上vp,也就是在gym上找到相应的比赛去做

codeforces-gym

关于xcpc比赛还有牛客,洛谷,qoj,uccup等网站都会有比赛,因为有些比赛只会出现在某一个平台,想vp的话可以直接问群友在哪

problems

板刷cf一般就是指从这里筛选难度区间后开始刷题

codeforces-problems

随意点进一个题目的页面是这样的

codeforces-problem

个人主页

codeforces-个人主页

顺带讲一下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命名!) 红黑

atcoder

比赛页面

采用的是 IOI +罚时赛制,取分数为第一优先级,最后一次有效提交的时间+错题数*5分钟作为罚时进行排行。

实际上这个页面我几乎没怎么用过,因为有个非常好用的页面可以用

atcoder-比赛页面

AtCoder Problems

关于上面说的好用的网站其实就是AtCoder Problems这里只介绍最常用的功能

一般可以直接在这里找自己想要VP的比赛,或者干脆在这里找题

Atcoder Problems

注册比赛

以ABC408为例,想要打比赛首先先要注册(刚好写这篇博客的时候正在打比赛)

atcoder-注册比赛1

点击蓝色Rigister注册按钮后会显示两个按钮——Rated Register/Unrated Register,可以用来选择要不要计分打比赛(超过1999分的选手只能不计分参赛),此外如果选择的计分参赛,那么无论交不交题都会被算作参赛(CF中如果注册了但是不提交代码将会视为未参赛)

如果是之前已经举办过的比赛,那么这个页面中只有VP的注册按钮

atcoder-注册比赛2

比赛题目列表页面

接下来点击Task进入题目页面,点击题目就可以做题了

atcoder-contest-tasks

比赛题目页面

atcoder-contest-task1

atcoder-contest-task2

atcoder-contest-task3

代码提交页面

除了直接在题目中提交代码,还可以在Submit页面提交代码

atcoder-contest-submit

atcoder-contest-results1

atcoder-contest-results2

排名页面

在Standing中可以查看比赛的排名,但是并不像CF一样可以直接查看自己关注的人的排名,需要一点点的筛选

atcoder-contest-standings

牛客

主页

牛客-主页

个人主页

因为全是中文,所以好像没什么需要特别介绍的

牛客-个人主页

比赛介绍

比赛类别 描述
周赛 每周举行一次,题目简单,适合持续练习和积累经验。[0,1600)计入rating。
小白月赛 每两周举办一次,题目简单,专为编程初学者设计。[0,2000)计入rating。
练习赛 不定期上线,题型多样,用于知识巩固和日常训练。[0,2400)计入rating。
挑战赛 难度较高,适合进阶选手挑战自我、提升实力。
娱乐赛 偏趣味性,形式灵活,适合轻松放松和享受编程乐趣。不计rating,会有很多奇思妙想的题目。
牛客多校 牛客暑期多校是面向准备参加ICPC/CCPC等算法竞赛选手的暑期训练营。难度极高,适合参与区域赛的选手。
寒假训练营 是面向基础选手而举办的训练营,包括赛前训练+比赛。每场10-12题,题目难度适合基础小白选手练习。

内测

如果你觉得平时没有比赛很无聊,你可以尝试着参与牛客内测

牛客竞赛内测流程说明:https://docs.qq.com/doc/DY09ZZk5RalNGbVZv

【要求】 1、至少参加过3次牛客系列赛(仅包含小白月赛、练习赛、挑战赛) 2、竞赛水平没有要求,各水平阶段的同学都可以。 3、内测要求严格保密,仅可本人作答和查看题目。正式比赛时不能提交,如果有泄露题目或在正式比赛提交的行为牛客会进行追责。

参与内测可获得牛客周边。

牛客比赛内测萌新招募! 如果你是算竞萌新,对比赛内测感兴趣,欢迎加入我们! 详情请看以下帖子。 https://ac.nowcoder.com/discuss/609862

投题

牛客是日常收题的,如果有好的idea可以投题挣一点零花钱

收题啦!收题啦!大量收题!出题有现金报酬,期待你的妙妙题目。 你可以投递单题,也可以投递一场比赛(现在投递不用排队),也可以只投递idea,甚至可以投递你不会做的题。 最近小白赛非常稀缺!现在投小白可以尽快上线。 牛客系列赛流程与要求: https://docs.qq.com/doc/DUHRzTmFxRkxSc21K

洛谷

老牌竞赛网站了,功能十分齐全,鉴于洛谷的功能实在是太多,所以这里我只挑我认为必须要知道的功能/页面来介绍

如果想要详细完善的了解洛谷可以看官方文档:洛谷主站操作指南

主页

洛谷-主页

个人页面

主页

洛谷-个人页面-主页

专栏

在专栏区可以发布自己的题解/知识向博客等文章

洛谷-个人页面-专栏

练习

洛谷并不需要安装额外的插件就可以看到自己的做题详细数据

洛谷-个人页面-练习

我的

这里分成三部分——加入的团队,参与的比赛和发布的贴子

洛谷有着功能十分强大的团队系统,这部分会在后面详细介绍

洛谷-个人页面-我的-团队

比赛这里可以查看自己参与过哪些比赛

洛谷-个人页面-我的-比赛

帖子这里可以用于发布求助帖之类的内容

洛谷-个人页面-我的-帖子

题库

如果有兴趣与能力自己造题的话,那么可以通过这个页面加上自己创造的题目,比赛与题单页面同理

洛谷-个人页面-题库

题库

洛谷强大之处在于它丰富的题库与方便的筛选功能

洛谷-题库

题目难度

洛谷的题目难度从低到高分别是:

入门普及−普及/提高−普及+/提高提高+/省选−省选/NOI−NOI/NOI+/CTSC

筛选

以筛选2024年蓝桥杯国赛题目为例

洛谷-题库-筛选示例1

洛谷-题库-筛选示例2

注意要把所属题库选择洛谷,这样我们就可以筛选出2024年的蓝桥杯国赛题目了

注意蓝桥杯题目的数据是洛谷方自造数据,非官方数据

洛谷-题库-筛选示例3

其他网站

我们可以注意到所处题库中包含了其他网站,也就是说我们是可以在洛谷去做其他网站上的题目(目前因为一些原因codeforces和atcoder的题目无法提交),我们也可以通过洛谷直接去看一些题目的汉化题意(感谢好心人的汉化)

洛谷-题库-其他网站

题单

洛谷的题单功能我认为是非常优秀的功能,刚入门学习语法/算法可以做官方精选题单,去刷一些高难度算法也可以在用户分享题单中找相关算法的题目

洛谷-题单1

例如我们刚刚学会了线段树,现在想要刷点例题,可以通过搜索功能快速找到相应的题单

洛谷-题单2

洛谷-题单3

而进入题单后还会有介绍部分,有些题单并没有设置题目列表,但是需要做的题都在题单简介中分类了

洛谷-题单4

专栏

我觉得洛谷的专栏质量还是很高的,有很多算法理论讲解博客都非常优秀,洛谷也有洛谷日报这样的精选合集,如果想补一下技能的话可以来专栏区进行搜索相关内容学习

洛谷-专栏

云剪贴板

如果你想请教群友一些题目,你已经写好了代码但是找不到bug,请不要直接粘贴代码发过去,这很折磨。所以这个时候就需要云剪贴板的帮助了,而洛谷就提供了云剪贴板的功能(也有很多网站有云剪贴板的功能)

首先在洛谷的左侧工具栏中点击 应用>> 部分查看二级菜单,选中 云剪贴板 进入,或者是直接点击这个url也可以:洛谷云剪贴板

洛谷-云剪贴板1

如果想要粘贴代码的话可以根据下图箭头指示的 插入代码 功能来插入代码。

洛谷-云剪贴板2

洛谷的云剪贴板是支持markdown语法的,事实上上面的 插入代码 功能本质上是直接帮你写一部分markdown语句,所以你可以选择直接写markdown的语法来插入代码,例如

```cpp
你的代码
```

其中 cpp 表示的是 cplusplus 也就是 c++,如果是 python 语言的话就把 cpp 换成 python,如果是 java 语法就换成 java

团队

洛谷有着很优秀的团队功能,配合上洛谷题库用于平时的团队训练是很实用的

洛谷-团队

例如想要让集训队一起训练的话我们可以根据情况建立一个作业/题单/比赛,下面以建立比赛为例

洛谷-团队-比赛说明

洛谷-团队-比赛信息

点击保存后我们可以进入题目编辑页面,通过搜索题号加入题目来组织比赛题目

洛谷-团队-比赛题目

这样我们就建立好了一个比赛了

洛谷-团队-比赛

qoj

收录国内外知名比赛、训练营与训练活动的大型算法题库,尤其是中国 ICPC 与 CCPC 区域赛题目最为齐全,并独家整理了许多高质量但传播度不广的试题集。是全球众多 IOI 和 ICPC World Finals 选手的核心训练平台。

主页

qoj-主页

比赛

例如马上就要参加xx省省赛/xx站区域赛之类的比赛,我们可以在qoj的比赛归档中找到相应的地区,就可以去做/vp往年的题目了

例如我们想要vp一下2024年杭州ICPC区域赛的题目

qoj-比赛归档

依次选择ICPC/Regionals/Asia East Continent即可进入该目录Asia East Continent

qoj-比赛分类1

点击The 2024 ICPC Asia East Regionals目录进入下一级目录就可以找到我们想要找的比赛了

qoj-比赛分类2

当然也可以先回到上一级页面向下滑动,我们也可以根据地区找到我们想要找的比赛

qoj-比赛分类3

qoj-比赛分类4

代码工具

实际上算法竞赛中对工具的要求极低,甚至一些网页的在线代码运行都足够了。

小熊猫C++

是下文的dev c++的上位替代品,如果是刚刚入门的选手那么我推荐你安装个小熊猫C++就够了,因为它的安装与运行十分简单。

下载链接:小熊猫C++

小熊猫C++下载页面

点击蓝奏云网盘(仅windows版本) 分享码:f0tp下载即可,下载后缀是win64.MinGW64_xx.x.x.Setup.exe的文件

小熊猫C++正确版本的特征图片

特征在于,中间是win64.MinGW64、末尾是.exe。如果你的电脑是32位的,下载中间是win32.MinGW32的即可。

如果你不懂什么是32位什么是64位,那么你的电脑肯定是64位的,下载win64.MinGW64的版本即可

下载完成后点击安装,所有过程无脑下一步即可。注意安装路径里面千万不能有中文,否则会导致无法使用,最好就别改安装路径!!!

安装完成后使用 ctrl + n 新建文件

写好代码后按 F11 便可以实现编译运行代码

image-20250515121237699

可以在顶部菜单工具->选项内进行各种外观设置。

小熊猫C++选项入口图片

在选项设置窗口中的编辑器->杂项可以设置保存前动作重新排版,小熊猫C++会在你每次保存后自动整理代码。也有专门的代码排版设置区,可以完全自定义代码排版规则。

小熊猫C++杂项界面

编辑器->代码模板内可以自定义C文件模板C++文件模板,这样子新建文件会自动拥有初始的板子代码,方便打线上赛。

主界面左侧有试题集选项卡,点开后点击绿色+号创建,直接点击确定。

小熊猫C++创建试题集

然后底部有试题选项卡,点开后在底部左侧的试题控制面板点击绿色+号创建试题。

小熊猫C++创建试题

然后右侧的第一个编辑框可以粘贴样例输入,右侧最后一个编辑框可以粘贴预期输出

小熊猫C++设置样例

最后在左侧面板点击文件和绿色三角形图标启动评测,即可很方便的在本地评测,再也不需要每次都手动编译运行粘贴样例了。

小熊猫C++执行评测

如果你要打XCPC,建议在比赛前一两周和队友集体学习下Clion的使用(下文会介绍)。这是因为赛场是没有小熊猫C++的,只有VS CodeClion;而部分赛点的VS Code无插件,处于残废状态;这时Clion可以保证你的代码体验不受影响。

Dev C++

这个IDE主要是在天梯赛和蓝桥杯时使用,在日常使用尤其是新手入门中,我更推荐上文的小熊猫C++

这里的下载链接是天梯赛的推荐版本,可以以这个为参考:dev c++ 下载链接

天梯赛比赛环境

如果平常经常使用非Dev C++的IDE,建议在蓝桥杯天梯赛前一周用Dev C++设置C++11标准打几场适应下。当然,并不建议平时训练用Dev C++,虽然不需要训练就能直接上场,但是Dev C++的各种过时设计在平时训练中会浪费你大量的时间。

VSCode

如果你觉得dev已经无法满足你了,你需要更方便的插件/功能,你可以考虑vscode,具体教程可以见我之前的文章

【竞赛工具】——vscode xcpc竞赛向配置教程

Sublime Text4

sublime同样是轻量级的代码编辑器,并且也可以安装很多实用的插件,具体教程可以见我之前的文章

【竞赛工具】——sublime text4 xcpc竞赛向配置教程

Clion

这个是我自己一直在用的IDE,现在可以免费使用了,不过比较重量级,打开ide和运行代码要费一点点时间,其他很完美,可以直接在官网下载。

Clion

Markdown

我非常推荐大家学习一下Markdown的语法。

这主要是用于我们写博客/题解时使用,本文的全部内容也都是我用Markdown写的,这里推荐我最常用的Markdown 编辑器和阅读器Typora。

关于语法部分可以见官网——Markdown教程

Typora 官方中文站

LaTex

LaTex更多的是用于排版和写数学公式等场景,尤其是题解部分,LaTex更是必备技能。

学习LaTex可以看oiwiki中的文档——OI-wiki LaTex 入门

结语与致谢

文章的最后我想聊一聊热爱

我们偶尔以“网瘾”自嘲,但心知肚明,在这条道路上能够步履不停,终究离不开那份深刻的热爱。

是因为我们对算法竞赛的热爱,让原本平行生活的人产生了交汇,让我们在一条艰辛的道路上共同进步。赛场之上,每一位选手都是我们的竞争对手,每一位选手都全力以赴,去超越前方的身影,力求最佳表现。走出赛场,每一位选手都是我们的朋友,大家都会轻松愉快的相互调侃,赛后一起聚餐和互换吧唧。

这条道路上注定会充满坎坷,也许因平日训练成绩的不理想而滋生些许自卑,也许我们会因与更高奖项擦肩而过而感到遗憾,也许最后的结果并不尽如人意。但每当这些情绪袭来,当我们习惯性地解锁手机,打开那熟悉的群聊,我们总会看到能够解决我们的苦恼并且熟悉的答案——“加训!”

向所有通过 [提交 Issue / 提交 PR / 提出建议] 等方式为本项目做出贡献的选手表示衷心感谢。正是有了大家的参与和支持,文章才能不断完善与进步。

  • XY0797 提交了关于将图片本地化保存与完善小熊猫dev部分的pr。

特别鸣谢四位审阅老师:Silencer76老师Qingyu老师Chenzhe老师Temp老师。感谢各位老师抽出时间提供了专业且细致的审核意见。

特别鸣谢PHarr老师,感谢PHarr老师为博客建立了一个Wiki版本,使得大家可以更方便的查阅本文内容。

衷心感谢XCPC萌新互助进步群2群的群友们,在文章撰写过程中帮忙提供了非常多的idea,并且热心地帮助我找出了许多bug。感谢群友的鼎力支持,才让这篇文章得以不断完善和提升。

About

【打破信息差】萌新认识与入门算法竞赛

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors