OI 竞赛百科:全球信息学奥林匹克赛事体系、赛制规则与参赛路径全解析
【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki
信息学奥林匹克竞赛(OI)是面向中学生、以算法与程序设计为核心能力的学科竞赛。本文以 OI Wiki 的 竞赛指南文档 为骨架,系统梳理 OI 的定义与考察内容、OI / IOI / Codeforces 三类主流赛制、从 CSP-J/S、NOIP、省选、NOI 到 IOI 的完整晋级链路,并横向对比美国、波兰、日本、俄罗斯、加拿大等全球主要赛区与 BalticOI、CEOI 等国际赛事的赛程与难度分布,为参赛选手、教练与研究者提供一份可检索、可引用的赛事知识总表。
什么是信息学奥林匹克竞赛(OI)
信息学奥林匹克竞赛(英语:Olympiad in Informatics,简称:OI)是一门在中学生中广泛开展的学科竞赛,与物理、数学等竞赛性质相同。OI 考察的内容是参赛者运用算法、数据结构和数学知识,通过编写计算机程序解决实际问题的能力。
从竞赛的命题取向看,OI 与"写业务代码"有着明显区别:考试题目一般为算法或者数据结构相关的内容,考察选手在限时、限内存条件下设计并实现高效算法的能力。题目形式包括:
- 传统题:最常见的规定输入和输出到文件的题目,评测系统用预先准备的输入输出数据对选手程序进行黑盒评测。关于传统题评测细节、时间/空间限制与各类评测结果(AC、CE、WA、RE、TLE、MLE 等),可参考 题型介绍。
- 非传统题:提交答案题、交互题、补全代码题等等。其中交互题需要选手程序与测评程序交互完成任务,包含 STDIO 交互与 Grader 交互两种主流形式,其细节与示例代码可参考 交互题详解。
全球与中国的 OI 赛事版图
OI 竞赛种类繁多,仅中国就包括:
- 全国青少年信息学奥林匹克联赛(NOIP)
- 全国青少年信息学奥林匹克竞赛(NOI)
- 全国青少年信息学奥林匹克竞赛冬令营(WC)
- 国际信息学奥林匹克竞赛中国队选拔赛(CTSC)
国际性的 OI 竞赛包括:
- 国际信息学奥林匹克(IOI)
- 美国计算机奥林匹克竞赛(USACO)
- 日本信息学奥林匹克(JOI)
- 亚太地区信息学奥林匹克(APIO)
对于大部分选手而言,每年的新赛季从 9 月的 CSP-J/S 第一轮开始。
语言与工具约定
在中国,OI 竞赛允许使用的语言只有C++(曾经也开放过 C 和 Pascal 语言,但都已停止支持)。其中,不同的竞赛对 C++ 的版本有不同的规定。这意味着选手的日常训练应当围绕 C++ 展开;从 学习路线 也能看到,入门阶段的第一步就是从 C++ 语言基础(变量、运算、流程控制、函数与递归)开始,再逐步进入算法与数据结构的学习。
赛制介绍:三类主流赛制的得分与评测规则
不同赛事的核心差异在于提交次数、实时反馈、罚时与部分分机制。理解赛制是制定赛场策略的前提。
OI 赛制
OI 赛制的特点可以概括为"一锤定音":
- 选手仅有一次提交机会;
- 比赛时无法看到评测结果,评分在赛后公布;
- 每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数;
- 每个测试点还可能有部分分,即使只有部分数据通过也能拿到分数。
CSP-J/S 第二轮、NOIP、省选、NOI 都是 OI 赛制。
自评测工具 selfEval
现如今,在一些 NOI 系列赛中,提供了 selfEval 自评测工具。selfEval 内置于全国赛定制版 NOI Linux 中。自 NOI2023 正式公布并投入使用后,selfEval 陆续用于其后的 NOI 全国赛、APIO(中国区)和 NOI 冬令营等。
选手可以使用 selfEval 在一组测试数据(称为预测试数据)上测试自己的程序,并得到反馈结果。需要注意:
- 选手在每场比赛中的自测次数有指定上限(NOI2024 自测次数上限为 50 次,NOI2025 自测次数上限为 30 次);
- 预测试数据是选手不可见的;
- 由于预测试数据不同于正式测试数据,自测结果仅用于调试,不能被视作正式评测成绩;
- 选手在同一题目上多次进行预测试,所使用的预测试数据是相同的。
IOI 赛制
IOI 赛制相对宽容:
- 选手在比赛时有多次提交机会;
- 比赛实时评测并返回结果,如果提交的结果是错误的,不会有任何惩罚;
- 每道题都有多个测试点,根据每道题通过的测试点的数量获得相应的分数。
APIO、IOI 都是 IOI 赛制。目前国内比赛也在逐渐向 IOI 赛制靠拢。
Codeforces(CF)赛制
Codeforces 是一个在线评测系统,会定期举办比赛。它的比赛特点与 OI / IOI 有明显区别:
- 比赛过程中只测试一部分数据(Pretests),而在比赛结束后返回完整的所有测试点的测试结果(System Tests);
- 比赛时可以多次提交,允许Hack别人的代码(此处 Hack 的意思是提交一个测试数据,使得别人的代码无法给出正确答案);
- 如果想要 Hack,选手必须要锁定自己的代码(换言之,比赛时无法重新提交该题);
- Hack 时不允许将选手程序拷贝到本地进行测试,源代码会被转换成图片。
Codeforces 同时提供另外一种赛制,称作扩展 ICPC(Extended ICPC 或 ICPC+)。在这一赛制中,比赛过程中会测试全部数据,但比赛结束以后会有 12 小时的全网 Hack 时间。Hack 时允许将选手程序拷贝到本地进行测试。
与 OI 系列赛并列的还有面向大学生的 ICPC / CCPC 赛事,其赛制(三人一队、罚时规则、封榜机制)可参考 ICPC/CCPC 赛事与赛制。
中国主要赛事:从 CSP-J/S 到 IOI 的晋级链路
CSP-J/S:非专业级软件能力认证
CSP-J/S(英文:Certified Software Professional Junior/Senior)是 NOIP 在 2019 年被取消之后,CCF 开设的非专业级软件能力认证测试,在 2025 年以前面向全年龄段,后改为 12 周岁以上。
CSP-J/S 分为入门级(Junior,简写为 CSP-J)与提高级(Senior,简写为 CSP-S)两组,赛程分为第一轮(一般在每年 9 月)和第二轮(一般在每年 10 月)两场:
- 第一轮为笔试,考察计算机理论和操作常识、基本的算法与数学知识;
- 第二轮为上机考试,入门组与提高组都为 4 题,其中入门组考试时间 3.5 个小时,提高组 4 个小时(CSP-S 2019 除外,该场比赛使用旧 NOIP 提高组赛制,赛程分为两天,一天 3 题 3.5 小时)。
第一轮面向社会全体 12 周岁以上学生报名,经过一定的排名筛选后成绩优秀者有机会参加第二轮。报名参加第一/二轮、第二轮后进行题目申诉等都需要向 CCF 缴费。两轮测试都会以省为单位按照排名对选手成绩进行评级认证,分为一、二、三等。
NOIP:全国青少年信息学奥林匹克联赛
NOIP(英语:National Olympiad in Informatics in Provinces)是中华人民共和国组织的、面向中国(含港澳)中学生的信息学竞赛。
2018 年及以前的旧赛制:NOIP 按参赛对象分为普及组和提高组(2018 年于上海试点入门组);按阶段分为初赛和复赛两个阶段。初赛会考察一些计算机基础知识和算法基础,复赛为上机考试。时间上一般是 11 月的第二个周末:
- 周六上午:提高组一试 8:30-12:00(3.5 小时,共 3 题);
- 周六下午:普及组 14:30-18:00(3.5 小时,共 4 题);
- 周日上午:提高组二试 8:30-12:00(3.5 小时,共 3 题)。
全国使用同一套试卷,但是评奖规则按照省内情况由 CCF(中国计算机学会)统一指定,并于赛后在 NOI 官方网站上公布。各省的一等奖分数线略有不同。
赛制沿革:NOIP 于 2019 年 8 月 16 日被 CCF 暂停,于 2020 年 1 月 21 日被宣布恢复。2020 年起的 NOIP 赛制与以往有所不同,具体如下:
- 取消初赛,由 CSP-J/S 第一轮替代;
- 取消普及组,由 CSP-J 替代,此后 NOIP 仅有一个组别,面向提高组水平选手;
- 赛程由以往的两天共 6 题、每天 3.5 个小时,缩减为一天 4 题、共 4.5 个小时;
- 选手需要在CSP-S 第二轮中取得一定名次才能获得 NOIP 参赛资格,具体名额各省有所差异。NOIP 省级参赛资格由该省在去年赛季中的参赛人数和成绩等有关。
报名参加 NOIP 和进行题目申诉不需要额外缴费。NOIP 以省为单位排名评奖。截至 2019 年,大部分高校的选手获得提高组省一等奖可以得到自主招生资格;2020 年起,国家不再组织开展高校自主招生工作,转为在部分一流大学建设高校开展基础学科招生改革试点(强基计划)。
省队选拔赛
省队选拔赛(简称:省选)用于选拔各省参加全国赛的代表队,一般举行于每年的 1~4 月。赛程上一般分为两天,每天 3 题 4.5 小时。
- 省选题目由各个省自行决定,目前的趋势是很多省份选择联合命题;
- 各个省队的名额有复杂的计算公式,一般和之前的成绩和参赛人数有关。通常来讲,NOIP 分数需要在省选的指标中占一定比例;
- 根据规则,初中选手只能被选拔为 E 类选手,不能参加 A、B 类选拔;
- A 类选手有 5 人(至少 1 名女选手),其他选手根据给定名额和所得分数依次进入 B 队;
- 一个学校参加 NOI 的名额不超过本省 A、B 名额总数的三分之一(四舍五入),得分最高且入选 A 队的女选手不占该比例(简称 1/3 限制或 1/3 淘汰);
- 自 2020 年起,NOI 省队选拔由 CCF 统一命题和评测,有能力命题的省可自行命题,但选拔方式需得到 CCF 的批准;自 2024 年起,NOI 省队选拔恢复各省自主命题,有需求的省份可组织联考或使用他省试题,但具体方案需要得到 CCF 的批准。
NOI:全国信息学奥林匹克竞赛
NOI(英文:National Olympiad in Informatics)是国内包括港澳在内的省级代表队最高水平的大赛,一般在七月份举行。
选手分为正式选手与夏令营选手两类:
- 正式选手又分为三类:A、B 类为省队正式选手(其中A 类在计算成绩时会有 5 分加分);C 类为邀请赛选手,名义上是学校对 CCF 做出突出贡献后的奖励名额;
- 夏令营选手分为 D、E 类,分别对应以非正式选手身份参赛的高中组与初中组选手。夏令营选手如果成绩超过分数线的话,只有成绩证明而没有奖牌(同等分数含金量要低一些)。
排名前 50 的正式选手组成国家集训队,获得保送资格。
在国际平台上,为了与其他同样称作 NOI 的比赛区分,中国的 NOI 有时会被称作CNOI。
CTT:国际信息学奥林匹克国家集训队培训
CTT(英文:China Team Training)是每年冬天为 IOI 国家集训队选手举办的集训与选拔活动,由 3-4 场测试组成。除国家集训队外,部分在当年 NOI 中取得优异成绩的选手也可以"精英集训"的名义参加 CTT。
CTT 与平时作业等其他流程共同组成了国家队选拔的第一阶段。自 2021 年起,在第一阶段排名前 30 的选手将成为国家候选队,进入第二阶段的选拔(WC)。
WC:全国青少年信息学奥林匹克竞赛冬令营
WC(英文:Winter Camp)是每年冬天在当年 NOI 举办地进行的一项活动。虽然该活动主要用于集训队培训与国家队选拔,但是前一年 NOIP 与 CSP-S 第二轮取得较好成绩的选手也可作为非正式营员参加。
WC 的内容包括若干天的培训和测试,测试成绩将和先前阶段的成绩汇总,算出集训队选手的综合排名:
- 2020 年前:测试仅有一场,且集训队与非正式营员的测试题目相同,集训队综合成绩前 15 的选手将成为国家候选队,参与最后阶段的选拔(CTS 等);
- 2021 年起:随着 CTS 的国家队选拔功能并入到 WC 中,国家候选队的测试变为两场,而非正式营员的测试仍为一场,且非正式营员的测试题目和候选队测试题目有部分重合。候选队中综合排名前 6 的选手将进入到最终的面试,并选出 4 名正式选手和 2 名替补选手参与当年的 IOI 比赛。
APIO:亚太地区信息学奥林匹克竞赛
APIO(英文:Asia-Pacific Informatics Olympiad)是一个面向亚太地区在校中学生的信息学学科竞赛。CCF 每年会在五月初举办中国赛区镜像赛,在比赛日前后会有培训活动。
APIO 参赛选手可分为 A 类和 B 类:
- A 类选手中的前六名(含并列)可参与 APIO 的国际奖项评选;
- B 类选手只能参与中国赛区的奖项评选。
APIO 以省为单位报名,一般按照 NOIP 的成绩排序来确定参加人员。
CTS:国际信息学奥林匹克竞赛中国队选拔赛
CTS(旧称:CTSC,英文:China Team Selection Competition)用来从国家候选队(15 人)中选拔国家队(6 人)准备参加当年夏天的 IOI 比赛,其中正式选手 4 人,替补选手 2 人。与 WC 一样,前一年 NOIP 取得较好成绩的选手也可以参加(不参与选拔)。
APIO 和 CTS 都以省为单位报名,一般按照 NOIP 的成绩排序来确定参加 APIO 和 CTS 的人员(二者一般时间上非常接近)。2020 年的 CTS 因为疫情而停办,当年的国家集训队通过 NOI 选出;2021 年起,CTS 的选拔流程被 WC 取代。
IOI:国际信息学奥林匹克竞赛
IOI(英文:International Olympiad in Informatics)是一年一度的面向全球中学生的信息学科竞赛。每个国家有四人参赛,比赛一般会有直播。IOI 赛制中每个题目会有Subtask(子任务),每个子任务对应一定的分数——这正是 IOI 赛制"多点得分、多次提交"设计的基础。
高校学科营:北大与清华
部分高校会在赛季间歇举办面向优秀中学生的信息学学科营,成绩优异者可能在升学中受益:
北京大学(PKU)
- 北京大学信息学冬季体验营(PKUWC):在冬令营前后举行;
- 北京大学信息学体验营(PKUSC):一般在六月份在校内举行。由于在学校机房比赛,机房环境是 Windows,比赛系统是 OpenJudge;
- 北京大学中学生暑期课堂(信息学):在暑假举行,面向高二年级理科学生。
清华大学(THU)
- 计算机系"大中衔接"冬季研讨与教学活动:相当于信息学冬令营,有时也会用英文简写为 THUWC。一般共两天,上午为竞赛(第一天是标准 OI 竞赛,第二天为清华独创的"工程题"竞赛),下午为课程培训。
其他国家和地区的 OI 竞赛
美国:USACO
USACO 或许是国内选手最熟悉的外国 OI 竞赛(可能也是中文题解最多的外国 OI 竞赛)。每年冬季到初春,USACO 会每月举办一场网络赛,一场比赛持续 3~5 个小时。
USACO 的比赛分成 4 档难度(2015~2016 学年之前为 3 档):
| 组别 | 定位与考察内容 |
|---|---|
| 铜牌组 | 适合编程初学者,尤其是只学了最最基础的算法(如:排序、二分查找)的学生 |
| 银牌组 | 适合开始学习基本的算法技巧(如:递归、搜索、贪心算法)和基础数据结构的学生 |
| 金牌组 | 学生会遇到更复杂的算法(如:最短路径、DP)和更高级的数据结构 |
| 铂金组 | 适合有着扎实的算法设计能力的选手,以复杂且更开放的问题来挑战自我 |
在国内,目前 USACO 题目最齐全的 OJ 平台是洛谷。
波兰:POI
POI 是不少省选选手最常刷的外国 OI 比赛。根据 POI 官方的描述,其流程如下:
- 第一轮:六题(第 31 届及以前为五题),网络赛;
- 第二轮:包含一场练习赛和两场正式赛,其中练习赛一题,正式赛每场两题;
- 第三轮:包含一场练习赛和两场正式赛,其中练习赛一题,正式赛每场三题。
在部分年份,曾举办名为ONTAK的比赛,其正式名称为 POI 训练营,对标国内的国家集训队集训赛(CTT)。另外,波兰国内还举办名为PA的公开比赛,大意为"算法大战"。目前在国内 OJ 中,POI 题目最全的是 BZOJ。
克罗地亚:COCI
COCI 是难度跨度很大的比赛,大约是从普及-到省选-。以往 COCI 所有的题目均提供题目、数据、题解和标程;2017 年底起,COCI 的题解和标程停止了更新,2019-2020 赛季重新开始更新题解和标程。洛谷、BZOJ 和 LibreOJ 都有少量的 COCI 题目。
日本:JOI
JOI(日文:日本情報オリンピック,中文:日本信息学奥赛)所有的题目都提供题目、数据、题解和标程。近两年的 JOI 决赛和春训营提供了英语题面,但并没有英语题解;历年的 JOI Open 都提供了英语版题面和题解。
JOI 的流程:
- 预赛(予選):难度较低,自 2019/2020 赛季起分为多轮;
- 决赛(本選/JOI Final):难度从提高到提高+左右;
- 春训营(春季トレーニング合宿/JOISC);
- 公开赛(通信教育/JOI Open Contest)。
JOISC 和 JOI Open 的题目的难度从提高到 NOI- 不等。绝大部分 JOI 题可以在 AtCoder 提交(日文题面),目前 LibreOJ 和 BZOJ 有近些年的 JOI Final、JOISC 和 JOI Open 的题目。
俄罗斯:ROI
ROI(俄文:олимпиадная информатика,中文:俄罗斯信息学奥赛)是俄罗斯的信息学竞赛,流程分为:
- 市级比赛(Municipal Stage)
- 州级比赛(Regional Stage)
- 决赛(Final Stage)
目前 LibreOJ 有近几年的 ROI 决赛题的译文。除此之外,俄罗斯较大型的、面向中学生的比赛还有:
- 信息学网络奥赛:由 ROI 出题人举办;
- 全国中学生团队信息学竞赛:该比赛的预选赛 Moscow Team Olympiad 可以在 Codeforces 上提交;
- Innopolis Open;
- 中学生编程公开赛:官网称该比赛对标 ROI。
加拿大:CCC & CCO
CCC(Canadian Computing Competition)与 CCO(Canadian Computing Olympiad)可在其官网查询历届的信息和试题等。在 DMOJ 上可以提交 CCC 和 CCO 题目,该 OJ 上还有 CCC 题解。
难度参照:CCC Junior/Senior 贴近 NOIP 普及组/提高组难度,而CCO 想要拿到金牌可能得有 NOI 银牌的水平。
新加坡:NOI SG
全称 Singapore National Olympiad in Informatics,在新加坡国内语境且不引起歧义的情况下也作 NOI。赛制上分为Online Qualification Contest(在线资格赛)和Final Contest(全国决赛):
- 在线资格赛以学校为单位报名参加,选手在本校参赛,通过网络进行远程提交;
- 资格赛成绩只在校内排名,前 5 名且非零分选手有资格作为校代表队参加全国决赛。
目前国内 OJ 对于 NOI SG 的题目收录比较匮乏,可以在官方的 GitHub 账号上找到历年题面、测试数据和官方标准程序。
台湾地区:資訊奧林匹亞競賽
台湾地区把 OI 中的 informatics 翻译成「資訊」而非大陆通用的翻译「信息」。台湾地区的选手如果想参加 IOI,需要经过这几轮比赛:
- 區域資訊學科能力競賽
- 全國資訊學科能力競賽
- 資訊研習營(TOI)
其他国家
- 澳大利亚:AIO——难度与 NOI 类似;
- 英国:British Informatics Olympiad——难度太低;
- 捷克:Matematická olympiáda–kategorie P;
- 罗马尼亚:Olimpiada Nationala de Informatica——题面、测试数据、题解请在含有 "Subiecte" 字样的标签页中寻找。
其它国际 OI 竞赛
除了各国国内赛事,还有一批区域性或大洲级的国际比赛,普遍具有题目难度大、部分年份公开题面与数据的特点。历年这些比赛的官网地址可在相关 OJ 社区帖子中汇总查询。
BalticOI:波罗的海
BalticOI面向的是波罗的海周边各国(如 2018 年的立陶宛、波兰、爱沙尼亚、芬兰等 9 国),题目难度大。除了 2017 年,BalticOI 每年都公开题面、测试数据和题解。BalticOI 没有一个固定的官网,每年的主办方都会新建一个网站。目前 LibreOJ 有近十年的 BalticOI 题。
BalkanOI:巴尔干
BalkanOI面向巴尔干地区周边各国(2018 年参赛国有罗马尼亚、希腊、保加利亚、塞尔维亚等 12 国),题目难度大。BalkanOI 只有某几年公开题面、测试数据和题解。
CEOI:中欧信息学竞赛
CEOI(2018 年参赛国与 BalticOI、BalkanOI 有部分重叠,包括波兰、罗马尼亚、格鲁吉亚、克罗地亚等国),题目难度大。CEOI 每年都公开题面、测试数据和题解。
eJOI:欧洲少年信息学奥林匹克
eJOI全名 European Junior Olympiad in Informatics,参赛国包含俄罗斯、亚美尼亚、保加利亚、波兰等国,题目难度较大。eJOI 每年都公开题面、测试数据和题解。
NOI(Nordic):北欧信息学奥林匹克
注意:此处介绍的不是「全国信息学奥林匹克竞赛」,而是 Nordic Olympiads in Informatics,面向北欧各国,是近两年才开始举办的比赛。
参考资料
- ICPC/CCPC 赛事与赛制
- 题型介绍:传统题、提交答案题、交互题、通信题等
- 交互题详解与例题
- 算法竞赛学习路线
- 竞赛常见错误清单
- 竞赛实用技巧(循环宏定义、namespace 等)
- 打表技巧(分段打表)
【免费下载链接】OI-wiki:star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法)项目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考