我在运行这个hackerrank Gridland metro的解决方案时遇到了分段错误

时间:2017-07-21 17:56:16

标签: c++ segmentation-fault greedy

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


int main() {
    //start of input
    long n,m,k;
    cin>>n>>m>>k;
    bool a[n][m];
    for(long i=0;i<n;i++){
        for(long j=0;j<m;j++){
            a[i][j] = true;
        }
    }
    long b[k][3];
    for(long i=0;i<3;i++){
        for(long j=0;j<k;j++){
            cin>>b[i][j];
        }
    }
    //start of main logic
    for(long i=0;i<k;i++){     
        long row = b[i][0]-1;
        long col_init = b[i][1]-1;
        long col_fin = b[i][2]-1;
        while(col_init<=col_fin){
            a[row][col_init]=false;
            col_init++;
        }
    }
    long count=0;
    //counting number of empty area
    for(long i=0;i<n;i++){
        for(long j=0;j<m;j++){
        if(a[i][j]==true){count++;}
        }
    }
    cout<<count;
    return 0;
}

约束:
1&lt; = n,m&lt; = 10 9
1&lt; = k <= 1000

所以在上面的代码中:

对于某些情况,我在上面的代码中遇到了分段错误 它适用于小输入,但是对于大输入有问题。

1 个答案:

答案 0 :(得分:0)

问题表明1 <= n,m <= 10 9

所以制作像[n] [m]这样的数组会占用太多内存,这就是为什么你会遇到分段错误,想一个不同的方法来解决它......

如果您不想要如何解决问题,请立即停止阅读

提示:k的值小于1000,保存矢量数组中的所有火车轨道,不会超过内存,然后尝试添加可用位置的数量以安装路灯柱一个接一个地浏览那些“k”曲目,想一想如何做到这一点。