“因超时而终止”

时间:2019-11-14 17:41:10

标签: c++

我如何使我的代码更高效,我在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;
}

1 个答案:

答案 0 :(得分:1)

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

还应避免在每次输出后冲洗。

++i可以比i++更快,并且永远不应该慢于#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; }

删除未使用的标题。

{{1}}