Как решить ошибку SIGSEGV для очень больших массивов входов? - PullRequest
0 голосов
/ 21 января 2019

Итак, я решал проблему в HackerEarth, которая проверяет ваш код на очень больших тестовых примерах.Таким образом, когда я пытался отправить код, он прошел для первых 6 тестовых случаев, для 5 других он дал «Превышен лимит времени», а для всех остальных - сигнал SIGSEGV.

Вот код:

#include<bits/stdc++.h>
#include<cmath>
using namespace std;

int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
long long unsigned int tc,b, a , d,c;
cin>>tc;
for(int i=0;i<tc;++i)
{
    cin>>a;
    cin>>d;
    cin>>c;
    cin>>b;
    long long unsigned int arr[b+1];
    arr[0]=a;
    arr[1]=d;
    arr[2]=c;



    if(b>=3){

        for(long long unsigned i=3;i<=b;++i)
        {
            // arr[i]%=1000000007;
            (arr[i])=(arr[i-1]+3*arr[i-3]+2*i)%1000000007;
            arr[i]%=1000000007;
        }
        printf("%llu \n",arr[b]%1000000007);



    }
    else{
        printf("%llu \n",arr[b]%1000000007);
    }
}
return 0;
}

Пожалуйста, помогите.Спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Вы пытаетесь получить доступ к памяти, которая вам недоступна. Это причина для SIGSEGV. Вам нужно объявлять размер массива статически, а не динамически.

Однако лучше использовать вектор, так как вы используете C ++.

...