在向SPOJ和Codechef等在线评委提交我的解决方案时,我正在为一些项目多次获得NZEC。我注意到包含多个函数和类的程序中的这种行为。
有人可以建议我哪里出错吗?
问题:https://www.codechef.com/problems/FIRESC/
我的回答:https://www.codechef.com/viewsolution/16564688
请对程序进行更改并试用!
非常感谢任何帮助!
答案 0 :(得分:1)
在"约束"下,它说:
1≤N≤100000(10 ^ 5)
0≤M≤100000(10 ^ 5)
你的代码有这一行:
f.adj=new int[f.n][f.n];
但如果N为100000,则您尝试创建一个一亿整数的数组。当我尝试它时,我尝试创建数组时得到一个OutOfMemoryError。
您将不得不改变计算答案的方式,以便不使用这样一个可能很大的数组。
答案 1 :(得分:1)
如果N相对较大,f.adj=new int[f.n][f.n];
初始化可能导致错误。分别为[0,100000]和[1,100000]的N和M个元素,最坏的情况是需要超过37 GB。
此外,例如,在未能检查输入是否有效的情况下发生错误;如果输入不是整数,t=sc.nextInt();
将抛出InputMismatchException。不太了解程序如何执行以及实际错误本身使诊断变得冗长乏味。
作为旁注,使用有用名称命名变量是自动记录的好方法