OJ(vjudge)错误提示类型
这个寒假学校组织了ICMP程序设计冬令营,其中要用到的Oj提交部分,在提交的时候会遇到各种各样的错误,学习错误的提示是很重要的一部分。
什么是OJ
Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。
答案正确(Acepted, AC)
恭喜你!所提交的代码通过了数据!这个评测结果应该是大家最喜欢见到的,也非常好理解。如果是单点测试,那么没通过一组数据,就会返回一个Accepted;如果是多点测试,那么只有当通过了所有数据时,才会返回Accepted。
编译错误(Compile Error,CE)
很显然,如果代码没有办法通过编译,那么就会返回Compile Error。这是要先注意时不是选错了语言,然后再看本地的编译器能不能编译通过刚刚提交的代码,修改轴再次提交即可。
答案错误(Wrong Answer, WA)
“答案错误”时比较令人懊恼的结果,因为这说明代码有漏洞或者算法根本就是错误的,只是恰好能过样例而已。不过有时可能时应为输出了一些调试信息导致的,那就删除多余的输入内容再输出。当然,大部分情况下都需要认真检测代码逻辑有没有问题。
运行超时(Time Limit Exceeded, TLE)
由于每道题都会规定程序运行时间的上限,因此当超过这个限制时就会返回TLE。一般来说,这一结果可能是由算法的时间复杂度过大而导致的,当然也可能时某组数据使得代码中某处地方死循环掉了。因此,要仔细思考最坏时间复杂度是多少,或者检查代码中是否可能数显特殊数据死循环的情况。
运行错误(Runtime Error, RE)
这一结果的可能性非常多,常见的有段错误(直接的原因时非法访问了内存,例如数组越界,指针乱指),浮点错误(例如除数为0,模数为0),递归爆栈(一般由递归时层数过深导致的)等。一般来说,需要先检查数组大小是否比题目的数据范围大,然后再去检查可不可能有特殊数据可以使除数或者模数为0,有递归的情况则检查是否在大数据时递归层数太深。
内存超限(Memory Limit Exceed,MLE)
每道题目都有规定程序使用的空间上限,因此如果程序中使用太多的空间,则会返回MLE,例如数组太大一般最容易导致这个结果。
格式错误(Presentation Error, PE)
这应该是最接近Accepted 的错误了,基本上由多输出了空格或者换行导致的,稍作修改即可。
输出超限(Output Limit Exceeded, OLE)
如果程序输出了过量的内容(一般是指过量非常多),那么就会返回OLE。一般是由输出了大量的调试信息或者特殊数据导致的死循环输出导致的。