“POJ上头的题都是数学题”,也不知道是那个家伙胡诌的……但是POJ的要求就是算法通过了也不让你AC。下面本人就这560题的经验,浅谈一下WA/RE了怎么办。
以下内容是扯淡……
一、WA/RE了之后不要感到不爽……实际上,有让你WA的机会是很幸福的,如果在NOIP上我能交题以前有人告诉我“Wrong Answer”……所以说你得感谢ACM给你改正的机会。
二、WA/RE了之后不要过于自信。实际上“第一次交WA,再交一次就AC”的说法几乎是胡说八道。WA了一定是你的程序写错了。
三、如果你3小时内还没改对,休息一会,明天再来吧。
好,现在我们步入正题。首先就WA的修改方法做下介绍。当然了,样例数据得先过。
WA篇:
一、看看人家的输入数据。是不是把boy的数据安到girl上了,n的值赋给m了……特别是样例中这一对数据还是相等的时候……我都不知道有几次干这样的傻事了。
二、还是输入数据。如果一个测试点里有多组数据,有没有可能比方说sum = 0的时候结果一定为0,而无论后面的数据是什么?这样的话你可能会一个continue转到下一组数据。可是数据流才不会continue,后面没读完的数据理所当然的冲到了最前方,你的程序就这样WA了……
三、初始化。你的初始化正确么?边界条件是0,1,还是kn?
四、循环变量。for的循环变量如果是k,就看看后边用的是不是i。
五、你的智商够不够高,是否考虑到所有的问题了?你可以想办法搞一份AC了的代码,里面写什么连看都不看,之后编写一个“测试数据制造机”,数大,数据多,情况就复杂,就可能出现你没想到的状况,拿两个程序对一下答案就知道了。
六、一定要看discuss,那里面都是几年来前辈们的错误总结。说不定还有又简单又厉害的数据供你使用。
RE篇:
一、数组是不是开小了?实在不行在Memory Limit允许的前提下开到数据范围的10倍以上。
二、除0错误。有多少高人在这个地方摔跤,甚至一蹶不振!全面检查一下 / 和 % 运算符的右边有没有可能等于 0。
三、数组起始位置。数组最好从 0 开始使用。如果定义a[MAX],就千万不要使用a[MAX]这个值。事实上,这样一般都引发WA。
四、死循环的话一般不报TLE,特别是循环中有数组操作的情况。因为这种情况下通常会出现a[-6569]一类的囧物……RE是理所应当的。死循环的话,就看看循环结束的条件是不是正确。
如果有了新发现还会继续发表。