在线评测系统

在线评测系统(,缩写OJ)是一种在算法竞赛竞赛中用来测试参赛程序的在线系统,也可以用于平时练习。近年来(2016年或更早)亦出现一些针对求职面试的在线评测系统。许多OJ网站会自发组织一些竞赛。此外,OJ网站通常会设立用户排名,以用户的提交答案通过数多少或某个题目执行时间快慢为排名依据。

原理
算法竞赛通常采取黑盒测-{}-试,事先准备好一些测试数据,然后用它们来测试选手的程序。

在在线评测系统中,用户需要提交源代码至服务器,服务器会编译用户的源代码,然后执行源代码生成的可执行文件(或用解释方式执行,或直接执行脚本文件),得到其输出的结果,并与正确结果比较。

为防止攻击和恶意提交,服务器必须采取一定的安全措施,例如对用户提交的源代码实施过滤、将进程放入沙盒以进行隔离、对代码进行哈希以防止抄袭和重复提交等。

题目状态
在提交程序之后,在线评测系统会根据题目的测评情况,返回评测结果。只有返回“Accepted”状态,才表示题目通过,选手才会获得成绩。不同OJ评测结果略有出入,但常见的评测结果大致分为以下三类。

正在评测

  • Pending & Waiting:系统繁忙,用户程序正在排队等待。
  • Pending Rejudge:因为数据更新或其他原因,系统将重新判你的答案.
  • Compiling:正在编译。
  • Running & Judging:正在运行并与标准数据进行比较。

程序未通过

  • Wrong Answer(簡稱WA):答案错误。
  • Runtime Error(簡稱RE):运行时错误,程序崩溃。
  • Compile Error(簡稱CE):编译错误。
  • Time Limit Exceeded(簡稱TLE):运行超出时间限制。
  • Memory Limit Exceeded(簡稱MLE):超出内存限制。
  • Output Limit Exceeded(簡稱OLE):输出的长度超过限制。
  • Presentation Error(簡稱PE):答案正确,但是输出格式不符合题目要求。在一些要求比較嚴格的比賽中,格式錯也會被視為答案錯誤

现在较为著名的在线评测系统有西班牙的UVaOJ、俄罗斯的SGU、Timus、Codeforces、波兰的SPOJ、美国的TopCoder、中国的POJ(北京大学)、ZOJ(浙江大学)、HDOJ(杭州电子科技大学)。

参见
*ACM国际大学生程序设计竞赛
*国际信息学奥林匹克
*TopCoder
*Codeforces
*UVa线上解题系统

参考文獻

评论 (0)

  • 还没有评论,来抢沙发吧。