"Terminated due to timeout"

"Terminated due to timeout"

本文关键字:timeout to due Terminated      更新时间:2023-10-16

如何让我的代码更有效率,我在Hackerrank上收到了一个"由于超时而终止"。请建议我应该做的更改以避免这个错误。

另外,是嵌套的for循环在某种程度上导致了这个问题吗?

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
int  n,k;
cin>>n>>k;
int **arr = new int*[n]();
for (long i = 0 ; i < n ; i++)
{
arr[i] = new int[n]();
}
for(int i =0;i<n;i++)
{
int b;
cin>>b;
for(int j=0;j<b;j++)
{
cin>>arr[i][j];
}
}
for(int j=0;j<k;j++)
{
int a,b;
cin>>a;
cin>>b;
cout<<arr[a][b]<<endl;        
}  

return 0;
}

您为每一行中的n元素分配内存,但您访问每一行的b元素。对于b < n,这可能会降低性能,而对于b > n,这会导致未定义的行为。

还要避免每次输出后的冲洗。

CCD_ 5可以比CCD_。

删除未使用的标头。

#include <iostream>
using namespace std;

int main() {
int  n,k;
cin>>n>>k;
int **arr = new int*[n]();
for (long i = 0 ; i < n ; ++i) // <-- ++i instead of i++
{
int b;
cin>>b;
arr[i] = new int[b](); // <-- allocate memory for b elements
for(int j=0;j<b;++j) // <-- ++i instead of i++
{
cin>>arr[i][j];
}
}
for(int j=0;j<k;++j) // <-- ++i instead of i++
{
int a,b;
cin>>a;
cin>>b;
cout<<arr[a][b]<<'n'; // <-- don't flush on each line break
}  
return 0;
}