AC常见错误

来源:互联网 发布:数据分析思路 编辑:程序博客网 时间:2024/06/05 06:15
 敲打敲打敲打
奶奶个熊,记牢
Complie Error (CE) :编译错误,所提交的代码在评测系统中无法编译为可执行程序。        比赛中如果出现这种结果,只要不是系统出问题,那绝对要把队友或者被队友拖出去毒打一顿的,属于“ACM五大天啊杀了我吧的理由”之一。        当然作为初学者经常会犯这样的错误,例如Ctrl+C的时候复制漏了最后一个花括号啊,该交Java交了GCC啊,将VC代码交到GCC的时候没有将__int64换成long long啊等等。    Runtime Error(RE) :运行时错误,程序在运行中发生错误,导致程序非正常结束(有时候主函数没有return 0;评测系统也会给出RE,        因为很多系统会将程序返回值作为程序是否正常退出的判断条件,所以将main定义成int main()并在结束的时候return 0;是个ACMer的好习惯)。        造成RE的,一般有整数或者浮点数除0、访问非法内存。除零错误就比较简单了,至于访问非法内存,大概就是数组越界,        例如数组开得太小(“ACM五大天啊杀了我吧的理由”之二,Lyd的队长Zjx在训练的时候经常干的事情)但又访问a[10000000]那样,        又或者操作空指针,又或者递归层数太多导致函数爆栈(递归层数和运行机器默认的栈空间大小以及函数形参的个数有关,当然通常1w层是有的)。    Memory Limit Exceeded(MLE) :超内存,程序运行时占用内存多于题目规定可以使用的内存。可见明显数组也不是开得越大越好,        一般来讲五百万的int数组是毫无鸭梨的,更多的话就要看题目所限的内存是多少。    Output Limit Exceeded(OLE) :输出超限制,程序运行时输出过多内容,远远超出标准答案所需要的长度,并且超出评测系统所限制的内容长度。        经典的bug是调试代码的时候,在代码里加了printf语句显示一些中间结果等神马信息,然后提交的时候忘了删掉。。。这杯具绝对是“ACM五大天啊杀了我吧的理由”之三。    Time limit Exceeded(TLE) :超时,程序在规定时间内未能结束,这时评测系统会将程序强行结束,并返回TLE。超时有两种,写烂了和想烂了。        不同人写的代码都是很大差别的,有些人显得特别快,很大程度上是因为某些代码上的差异,例如i++和i+=1时间上就有差别,只不过如果代码里少量用的话是体现不出来的,        除此之外有很多经验上的优化以及良好的代码习惯,就是大家所需要慢慢养成的了。        如果你自认为没写烂了代码,那么很大可能是想烂了,也就是算法不对,或者说算法效率低,解决的办法便是好好再想想。    Wrong Answer(WA) :错误,程序输出与标准答案不一致。这个结果最复杂,各种诡异都有,也是最为常见的错误。你所要做的,就是从想法到算法再到代码实现,都扫过一遍,        看看其中有没有bug,又有啥边界条件没考虑到,如果找到一些可以让你程序WA的数据什么的最好了。如果找了很久都发现不到有什么问题,        那么恭喜,很有可能你错在了一个很不起眼的地方,而且找到了会让你抓狂,        例如Lyd处于无脑状态下会将循环里面的某些i写成j或者j写成i(“ACM五大天啊杀了我吧的理由”之四)而被队友给予严重BS。    Presentation Error(PE) :格式错误,程序输出与标准答案一致,但格式不对。如果你得到的是这个结果,那么恭喜,你离通过该题不远了,同时,麻烦站墙角面壁三分钟去。        通常这类错误会在你没注意题目要求结果漏了在两组数据的输出之间输出空行或者输出多了空格或者空行的时候出现,毫无疑问“ACM五大天啊杀了我吧的理由”之五。    Accepted (AC) :通过,熬夜到四点切了这题,这辈子值了-_-|||
原创粉丝点击