ACM OJ常见错误以及解决方法

不同OJ有不同的错误代码,有些OJ没有PE,SE啥的,甚至有没有TLE,RE的OJ,具体的要根据OJ分析,最好比赛前要测试下错误代码的种类,方便赛时找bug。

Wrong Answer :答案错误

输出的答案错误,具体问题各不相同,大概有这几种情况

1.代码哪里写出bug了,代码功能与自己想实现的功能相异。

2.解题逻辑和思路错误。

3.特殊情况没有处理,比如0,1,2和最大值这种边界值没有考虑。

4.空间开的不够大,造成越界,但越界并没有进行修改,或者修改的数据不是关键数据,导致不触发RE,但因为访问或者修改的错误的数据,导致输出结果错误。

 

Runtime Error :运行时错误

你的程序在运行的时候出错了,异常终止了。

1.越界,想从一些非法的地址空间读取或向其中写入内容。

2.除0或模0错误

3.过多的申请栈内存导致栈溢出,如无限或过多的递归,在main函数中申请空间(此项由于不同OJ设置可能会有出入,有些OJ栈内存很大)。

4.c++运行时异常,比如使用STL的非法操作,比如从空stack中取top,越界访问vector。

 

Presentation Error :输出格式错误

答案正确但没按题目要求输出,注意读题,或者行末空格,和最后一行输出的换行。

 

Time Limit Exceeded :时间超限

程序运行时间太长了,超过了对应题目的时间限制。

1.代码无限循环。

2.算法复杂度过大。

3.被卡常,可能算法复杂度是够的,但是题目时间卡的比较紧,导致你还是超时。这时可以考虑做一些常量优化,比如将线段树换为树状数组或者zkw树,将没必要的long long或者int的数组缩小为short甚至是char,加上快读快写。

 

Output Limit Exceeded:输出超限

程序输出了太多的内容了,超过了OJ的限制。

 

Memory Limit Exceeded:内存超限

程序运行所用的内存太多了,超过了对应题目的限制。

1.内存空间申请过大。

2.在有些oj(cf,洛谷)中,栈内存空间设置的非常大,这时当你出现过多的递归这种大量的栈内存使用的时候,不会栈溢出导致RE,而是内存超限导致MLE。


Compile Error :编译错误

程序编译错误

1.编译器选取错误,使用高版本的特性,却使用低版本编译器。

2.头文件问题,使用window系统的头文件,但OJ却是linux系统。

4. vs默认会自动添加一部分头文件,导致你在vs上运行没问题,但到oj上就有错误。

5.语法错误

 

Floating Point Error:除零错误

有些OJ除零错误有专门的错误代码

 

Segmentation Fault:段错误

类似RE。

1.缓冲区溢出,也就是你访问 了非法内存,,或者在C/C++中访问了空指针等等。

2.堆栈溢出。

 

Restricted Function:受限函数

调用了不该调用的函数,如fork(),execv(),socket()等

 

posted @ 2021-08-10 15:12  _comet  阅读(2010)  评论(0编辑  收藏  举报