在线评测系统(OJ)一览
什么是 OJ?
假设我们为某个题目(例如 A+B Problem)编写了一份代码,那么我们如何判断这份代码的正确性呢?
一般来说,我们会尝试自己输入一些手动构造的数据,例如向程序中输入 30 50
,来看看输出的结果是不是 80
,而这就被称作一个“测试点”:前者被称为“输入数据”,后者被称为“输出数据”,如果程序对于给定的输入数据,得到的输出数据和标准输出数据相匹配,那么就称它“通过”了这个测试点。
除了答案正确(Accepted,简称 AC),我们一般还可能得到如下结果:
- 答案错误(Wrong Answer,简称 WA)
- 时间超限(Time Limit Exceeded,简称 TLE)
- 空间超限(Memory Limit Exceeded,简称 MLE)
- 运行错误(Runtime Error,简称 RE)
- 编译错误(Compile Error,简称 CE)
对于正式的大型 OJ(在线评测系统,英文全称为 Online Judge),相比于我们手动构造测试点,具有如下优势:
大批高强度的测试点
一般认为,能够在大型 OJ 中出现在公共题单中的题目,其所有测试点必然经过了出题人和验题人的双重验证,能够覆盖各种极端情况,完整检查出程序潜在的各种漏洞
自动化的测试流程
相比于在本机上手动输入数据并肉眼比对,OJ 只需要你提供对应代码和编译/解释标准,就能够自动化的使用所有测试点进行检测,并给出对应的检查结果
灵活多变的测试方式
除了最简单的“逐字符比对”,大部分 OJ 还支持出题人编写脚本,来对测试数据进行更加灵活多样的检查(例如浮点数可以检查误差,而非严格字符比对)。此外,很多 OJ 还会支持一些更加新颖的题目测试形式,例如说有趣的“交互题”等。
目前,大部分 OJ 除了最为基础的题目评测功能,还提供了类似题目管理、比赛、题单、题解分享、在线交流等功能,可以说,他们已经形成了一套完整的算法竞赛生态圈。
常用 OJ 推荐
洛谷 OJ
官方介绍:洛谷创建于 2013 年 6 月 15 日,至今已有数十万用户,致力于为编程爱好者提供清爽、快捷的编程体验。它不仅仅是一个在线测题系统,更拥有强大的社区、在线学习功能。同时,许多教程内容都是由五湖四海的用户提供的,保证了内容的广泛性。无论是初学 OI 的蒟蒻,还是久经沙场的神犇,均可从洛谷获益,也可以帮助他人,共同进步。
洛谷是国内知名的 OJ,主要服务对象是高中信息学竞赛选手,但是其大批量的优质题目、众多选手分享的学习题单和完善的题解功能,使得它成为了一个优质的“算法知识点学习站点”。
对于大部分新手来说,洛谷基本上可以覆盖他们半年内的全部算法学习环节,只需要顺着洛谷的官方题单学习即可(当然,最好还是搭配一本他们的官方教材)。
牛客竞赛 OJ
牛客是一个主要面向普通程序员的社区平台,后面开始逐步进入算法竞赛领域。
目前来看,虽然它在新手入门阶段不如洛谷友好,但是它日常举办的小白月赛/训练赛等,是国内少有的能够对标 CodeForces 的合格个人训练赛。此外,牛客的寒假训练营与暑期的多校训练的质量也相当高,十分锻炼选手的综合能力。
牛客开设了很多算法竞赛课程,从基础的语法入门到高深的知识点专题,质量都很不错,有兴趣的同学可以购买并参加学习。
CodeForces
CodeForces 是全球规模最大的算法竞赛网站(或许没有之一),全球上万的算法爱好者在这里共襄盛举。很多重要比赛(例如历次 ICPC 和 CCPC 的题目和官方数据)都可以在这里找到。
相比于国内 OJ,CF 的题目会更加注重思维与技巧,这与 XCPC 的命题风格十分一致(毕竟绝大部分出题人的日常 OJ 就是 CF),因此 ACMer 必须大量在 CF 上进行训练。
CF 会日常举办各种比赛(官方的比赛往往叫做 Div X 或者 Educational Round ),参加的选手的 Rating 会根据发挥表现而产生变化。Rating是评价自身算法水平的一个重要依据,因此熬夜打打 CF 还是十分有必要的。
其他知名OJ介绍
POJ / HDOJ
北大和杭电的旧在线 OJ,很多老的学习博客的例题往往都在上面。
AtCoder
类似 CodeForces,也适合想要训练思维与技巧的同学来练习。
LOJ / UOJ
主要面向高中信息学奥赛选手,不详细介绍。(LOJ的网站写的真好看)
BZOJ
一款已经倒闭的OJ,但是上面有着大批量的优质省选题目(老OIer应该都听过这个名字),因此很多人仍然从事着“重建BZOJ”的工作。
河海大学在线评测系统(HHUOJ)
我校 OJ 的 IP 地址为 10.196.83.59,目前暂未提供外网访问渠道。
第一代HHUOJ由15级郑涌学长(Zyyyyy)搭建,服役年限为 2016-2022。
第二代HHUOJ由20级陈奕涵(ForLight)进行更新,在尽可能保留了旧数据的情况下,新增了更多功能(如 IOI 赛制)。
本 OJ 主要用于练习校赛题目与查看校赛题解、进行新生摸底测试与举办校程序设计竞赛,日常训练建议使用其他大型商业 OJ。