本文根据自身目前经验和同学遇到的问题,总结了NOJ做题中经常遇到的错误及相应的解决方法。
遇到不同错误提示,可按照编号顺序逐个快速排查。
WA
- 输出格式错误:仔细检查样例要求的输出格式,是否多输出或少输出;多输出内容应该是OE,但目前都会提示为WA。
- 算法错误:寻找部分样例进行测试;主要为算法未能实现题目求解目标,还包括输入读取错误(不能正确读取题目输入格式,未考虑输入范围)、需要初始化的变量未初始化、输入或输出的格式化符不匹配、类型错误等等。
- 未考虑极端值:测试可能出现的极端值,如可能导致除0模0运算、部分特殊值会让算法失效等等。
- 越界:以上错误均排除后,题目未给出输入范围,较小样例时均正确,则考虑为变量越界。
CE
- 语法错误(
你可能需要一个好的IDE):CB好多语法错误不会报错。 - 头文件缺失:检查调用的库函数和宏。
- 非标准用法:如引入了非标准库。(
见过一位同学的代码居然用了windows.h) - 堆栈溢出:如递归过深、在函数中开大数组;正常应该是ME,但目前部分提示为CE。
- 死循环:调试循环结构;正常应该是TE,但目前部分提示为CE。
- 内存泄漏:错误使用指针。
- 调用受限函数:如反复调用rand( )时未使用srand(time(NULL)),非常少见。
RE
- 访问非法内存:如数组越界、调用野指针、访问系统保留内存等。
- 堆栈溢出:同前;正常应该是ME,但目前部分提示为RE。
- 内存泄漏:同前。
- 死循环:同前;正常应该是TE,但目前部分提示为RE。
- 模0或除0:目前都提示为WA。
TE
- 死循环
- 算法需要优化:估算算法的时间复杂度,通常情况下OJ时间判断标准大概如下(以1000ms为例):
- 不会超时