以下代码在我的DEV-C ++编译器中完美运行但是当我在codechef中提交时,在运行3-4秒后它显示“SIGABRT ERROR”。我已经研究过这个错误并完成了我可以调试的所有内容,但即使在一周后我也无法进行调试。请帮忙 !!提前谢谢。
参考问题是http://www.codechef.com/problems/LOWSUM
enter code here
void selsort(long long *ssum,long long len)
{
long long low;
for(long long i=0;i<len;i++)
{
low = ssum[i];
long long pos=i;
for(int j=i+1;j<len;j++)
{
if(ssum[j]<low)
{
low = ssum[j];
pos = j;
}
}
ssum[pos] = ssum[i];
ssum[i] = low;
}
}
int main()
{
int t,k,q;
cin>>t;
for(int i=0;i<t;++i)
{
cin>>k;
cin>>q;
long long sq = k*k;
long long *mot=NULL,*sat=NULL;
mot = new long long [k];
sat = new long long [k];
long long *sum = new long long[sq];
long long qth;
long long b=0;
for(int j=0;j<k;++j)
{
cin>>mot[j];
}
for(int j=0;j<k;++j)
{
cin>>sat[j];
}
for(int j=0;j<k;++j)
{
for(int a=0;a<k;++a)
{
sum[b] = mot[a]+sat[j];
++b;
}
}
selsort(sum,sq);
for(int j=0;j<q;++j)
{
cout<<"\n";
cin>>qth;
cout<<"\n"<<sum[qth-1];
}
delete []sum;
delete []mot;
delete []sat;
}
return 0;
}
答案 0 :(得分:4)
发送SIGABRT信号
SIGABRT错误是由于致命错误导致程序中止造成的。在C ++中,这通常是由于C ++中的assert语句没有返回true,但是如果一些STL元素试图存储太多内存,则会产生这种情况。
在你的情况下,它似乎是使用过多的记忆
mot = new long long [k];
sat = new long long [k];
long long *sum = new long long[sq];
请注意,k的值可以大到20000,因此声明大小为k的数组会很好,但是sq = k*k
的顺序为4 * 10 ^ 8,这会导致内存不足问题记忆。而且你的算法也不足以在时间限制内给AC。
Codechef有自己的论坛来提出这样的问题,并且已经讨论了解决这个问题的更好方法