前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >训练场题库中判题结果的详细解释

训练场题库中判题结果的详细解释

作者头像
编程范 源代码公司
发布2018-04-18 16:19:07
1.4K0
发布2018-04-18 16:19:07
举报

对于判题结果仅仅是大致的解释,仍不少同学感到迷惑,那今天我们就对这些结果一一详细解释并举例说明,让大家彻底觉悟!

等待

等待

服务器正忙,请稍后查看

运行并评判

您的程序正在评测中

编译中

您的程序正在被编译

正确

恭喜您!完全正确!

格式错误

结果正确,但格式不正确,比如多或少了换行或空格

答案错误

经过比对,您的程序错误

运行错误

程序运行后发生错误,可能包括:1. 指针/数组违规访问2. 除数为03. 函数调用错误,或栈溢出4. 捕捉到违背处理的STL或自定义异常等

时间超限

程序运行时间超过了时间限制,请检查程序的算法效率

内存超限

程序使用的内存超过了内存限制,请检查程序是否栈/堆开辟空间过大 或内存泄露

输出超限

输出了与答案无关的信息,比如“please input”等提示

编译错误

程序语法错误,编译不通过。可能您在本地可以编译通过,但可能使用了非标准C的函数 ,请使用符合标准的语法。

对于,前三种,等待、运行并评判、编译中这第三种基本没什么问题,由题目的测试数据大小、服务器的资源情况决定的,基本怎么也在半分钟以内完成的(一直如此,可能服务器出问题,请联系管理员了)。第四种正确那想必是大家都想看到的!是我们通过一道题的终极目标!

重点呢,大家要明白OJ的原理,它的判题原则呢就是看你的程序输出和答案的输出进行比对,看看是否一模一样!请时刻牢记,要一模一样!一模一样!一模一样!(重要事情说三遍!)

下面我们给大家详细介绍几种常见的,告诉大家到底什么原因。

第一个是“格式错误”

格式错误,简单的解释就是结果正确,但由于格式不对,多或者少了换行、空格等等。这种情况大多发生在输出结果时,结果本身是正确的,但由于格式控制与标准答案不一致导致。如果题目有多组数据,比如咱们训练场的ACM入门训练1085题,求A+B的和,有多组测试数据,人家输入1空格5那你要输出6,人家输入10空格20你要输出30,如果就这么两组测试数据的话,那么你的答案应该是:

6

20

看到这个样子你应该想想你的格式控制了吧,那么这里输出是要有换行的,如果这里没有打换行,而是打了一个空格。那么你的输出结果将是:

6_20_

你和标准答案对对看,人家是竖着的,你是横着的,能对么?(记住,要一模一样!)

所以结果就如下图:

另一种情况,如果这里只输出,空格和回车都没有,那么你的结果将是:

620

啥?620?! 当然不是六百二,可你的程序输入结果明明如此嘛!

所以这种情况,直接报答案错误:

怎么样,关于这个格式错误,大家明白了吗?

第二个,“答案错误”

这种情况, 可能为做题人没有明白题目的意思,训练场题库中的题目基本都给出了样例输入和样例输出,是让你写完程序后测试、验证用的,不代表后台的测试数据就这些(PS:后台刁难你的数据多的很呢,hiahiahia~)。这里我们遇到的大多数情况,是你的程序可能已经测试过能通过样例的数据,但这不代表可以通过后台的测试数据。

训练场1392题为例,计算A+B的和,但,请仔细看题,题目中有描述称“多行测试数据,每行包含两个正整数a和b,a和b的范围不会超过1000位”,看到了吗?a和b不会超过1000位啊!验题君偷偷告诉你,它说不超过1000位,八成后台就有999位的数据在等你!你难道还敢写printf(“%d\n”,a+b);的代码吗?别说int了,就是long long也放不下哦! 想都不用想,肯定报答案错误!

这题是典型的大数相加算法。所以,一定要保证程序考虑的通用和全面性,包括是否有特殊情况没有考虑到。

第三个,“运行错误”

运行错误,基本上是你的程序运行过程中出错崩溃、停止了。可能有同学又会问,我自己机器上测试没问题啊!还是那句话,后台数据多的很,不定哪组数据就会让你的程序出问题,出现属于组越界访问、指针异常的问题,或某种情况下,除数出现为0的情况,甚至C++的STL库运用不当等等,这个时候,验题君建议同学们自己给自己多举几个常规和特殊的例子,然后断点调试全过程,逐句观察吧。验题君也只能帮到这了。

附:VC6编译器断点调试全系列教程(全)

第四个,“时间超限”

这种情况,八成是因为你的程序算法效率过低,不能在固定的时间要求内完成(一般是1s)。咱们C语言网的题普遍以入门和日常训练为主,此类算法题相对很少。这个问题也引申一些竞赛技巧,难以一一讲清,只能建议大家多训练、参加比赛来提升!

第五个,“内存超限”

这个问题基本少之又少了,相比之下java类代码内存较大,但很少有此类现象发生,也不排除C/C++代码有内存泄漏,譬如忘记free/delete内存等等。

第六种,“输出超限”

这类问题新人较常见,可能受于教学环境影响,习惯性在scanf和printf之前打印:“请输入”、“a,b的结果是:”、“please input”类似的语句,这种写法将直接存入输出结果中,作为结果比对,报输出超限甚至答案错误的结果。因为OJ是逐字符比对!还是那四个字:一模一样!

第七种,“编译错误”

首先,避免这个问题,建议大家使用Dev-c++、CodeBlocks、gcc编译器。以VC6为例,可能不写#include<stdio.h>用printf也可以,但OJ提交就会报错,还有64位长整形表示不同等等。建议训练场刷题同学使用刚才建议的三种编译器之一(下载链接见附)。

总结错误原因,请确认提交代码在gcc编译器环境下编译无误再进行提交,如果有把握使用VC6,则请确认代码在两种环境下没有编译兼容问题。

附:C/C++开发和学习人员必备工具下载集合(含助手及破解补丁)

以上七种,希望可以解决同学们的一些疑惑!

C语言网训练场,提供支持C/C++/JAVA语言的在线评测训练系统,欢迎大家提交反馈!私信验题君哦!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程范 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一个是“格式错误”
  • 第二个,“答案错误”
  • 第三个,“运行错误”
  • 第四个,“时间超限”
  • 第五个,“内存超限”
  • 第六种,“输出超限”
  • 第七种,“编译错误”
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档