有关oj运行机制的一点解释(持续更新。。。)


很久以前就想专门写篇有关oj原理的博客了
因为之前对电脑判题的原理有过质疑
于是在极长的一段时间内妄想在网络上找到相关的解答
后来在问老师问同学问博主问度娘一点一点解惑
慢慢总结后
大致覆盖了我目前的一些疑惑

1)首先是有关在线评测系统运行原理及各种报错常因

其实不难想象,电脑只是处理数据验证最后答案与期望答案是否相同,大部分的思考都由人来完成

oj一般有一组input文件和一组output文件,
先运行你的程序,同时在后台开始计时,
无法通过编译的是CE,
编译时开的内存过大时MLE,然后开始运行,

将所有input数据加入输入流中(数据量可能很大,几百万组什么的)
在这种大数据下除非你的程序是完美的,否则不可能通过。
将输出的内容和output文件比对,
不完全一样的WA,
数据一样当差换行和空格时是PE,
若在计时器计时结束前你的程序未能和output匹配完成(已完成部分都正确)是TLE,
输出流没有正常结束是OLE,
运行时调用了非法地址时是RE,

2)然后就是有关打榜时的要项

在正式比赛中input包括两部分,
一部分是出题人这对这道题可能的算法出的边缘数据,运算量最大的数据,特殊数据,
另一部分是大数据,就是随机生成大量的合法数据,将数据通过标程给出结果。
这两部分数据结合可以以极高的准确率判定提交的程序是否正确
在正式比赛中依然有裁判组,
他们只对ac率和预先估计相差极大的情况进行观察,
必要时重写oj,进行rejudge,
同时选手也可以申请裁判关注(裁判只对真正误判的情况回应),
你所想的由专家手动判题的情况是不存在的。
因为判题必须在极短时间完成。

但是好多网络赛中及时向出题人反映的情况却不少见

3)最后就是有关ac样例的疑点

仅仅是通过了样例的程序远远不能ac,
样例只是帮助你理解题意而已,
通常样例无法检测出程序的错误。
甚至有些样例是有误导性质的,
要走的路还很远
acm的题意描述通常是很严谨的,
在题意允许的范围的数据都可能出现,
特殊情况很多题目里还没说如何处理的情况几乎不存在。
题没过检查一下,看看disguss,
看看别人的解题报告什么的,有些东西做多了就理解了,

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BNUEP Offline Judge 北京师范大学珠海分校离线评测系统是在具备题目测试数据的情况下,能无联网自动评测ACM/ICPC模式的源代码评测系统(即本地测试工具、评测)。它主要有以下功能(所有的功能都无需联网,在本即可实现): *评测核心功能: 基本具备Online Judge的判题核心功能,如编译代码、内存限定,时间限定,获取代码长度等; *支持多种语言: 1.0 Beta2版本支持C/C++、Pascal、C#、JAVA; *出题模式 可以在有标准输入数据和标准程序的情况下,由系统产生标准输出数据,并可批量保存,同时自动命名标准输出数据的后缀; *文本高亮对比 在判题后,可以直接在本系统中将自己的程序输出和标准输出进行高亮的文本差异对比,操作类似于一些文本对比软件,在一定程度上可以较方便地发现WA代码的出错细节; *支持不限时执行代码 这个功能可以在一定程度上检测TLE代码的算法是否正确的,当然,不能是跑一天都没跑出来的程序; *打包与加密测试数据 使用加密后的数据可以正常判题,但不显示标准输出。这个功能是为了弥补放出去给别人评测的测试数据是明文的缺陷。加密之后评测方就看不到测试数据。这样就既可以实现离线评测,又可以实现Online Judge上的对测试数据屏蔽; ACM-ICPC简介: ACM国际大学生程序设计竞赛(简称ACM-ICPC)是由国际计算界具有悠久历史的权威性组织ACM学会(Association for Computing Machinery)主办,是世界上公认的规模最大、水平最高、参与人数最多的大学生程序设计竞赛,其宗旨是使大学生能通过计算充分展示自己分析问题和解决问题的能力。 ACM-ICPC的每一道题,都具备题目、需求描述、输入格式描述、输出格式描述、样例输入和样例输出共六大信息,有些题目还有一定的提示。此外,裁判还额外存储了关于该题的一组或多组对选手屏蔽的标准输入和标准输出数据,这些测试数据已经经过验证符合题意要求。当用户提交一道题目的源码之后,裁判会将该源码放入评测系统中编译运行,并使用标准输入作为用户程序的输入,然后获取用户程序的输出,接着,将用户程序输出和标准输出比较,最后返回给用户一个评判结果。评判结果包括:Accepted(测试通过)、Compile Error(编译失败)、Memory Limit Exceed(内存超出限制)、Presentation Error(格式错误)、Runtime Error(运行时错误,可能是数组越界,改写只读的内存,除零,栈或堆溢出等错误)、Time Limit Exceed(时间超出限制)、Wrong Answer(答案错误)等。
SJTU OJ是上海交通大学在线评测系统的简称。它是一个提供给学生练习编程和解决问题的平台。 首先,学生需要注册并登录SJTO OJ系统。系统会为每个注册用户分配一个唯一的用户ID和密码,以保证账户安全。 上编程练习是SJTO OJ的主要功能之一。学生可以在系统中选择不同的编程题目,例如算法题、数据结构题、数学题等等。每道题目都附带了详细的题目描述和输入输出样例。学生需要根据题目要求,编写相应的程序,并在系统中提交代码。系统会自动编译和运行学生提交的代码,并对其进行评测评测结果包括通过样例的数量、程序运行时间、内存占用等信息。 除了上编程练习,SJTO OJ还提供了一些其他功能。例如,学生可以查看自己的解题记录和成绩,统计自己的编程能力和进步情况。他们可以参加在线比赛,与其他学生一同竞争,提高自己的编程水平。 作为一名学生,使用SJTO OJ可以有效地提升自己的编程技能和解决问题的能力。通过参与编程练习和比赛,学生可以不断学习新知识,发现并改进自己的不足之处。此外,SJTO OJ还为学生提供了一个交流的平台,他们可以与其他学生分享自己的解题思路和经验。 总之,SJTO OJ是一个非常有用的在线评测系统,通过使用它,学生可以提高自己的编程能力,并享受与其他同学交流和竞争的乐趣。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值