我在运行这个黑客排名 Gridland 地铁的解决方案时遇到分段错误

I am getting segmentation fault while running this hackerrank Gridland metro's solution

本文关键字:解决方案 地铁 遇到 错误 分段 Gridland 运行 黑客      更新时间:2023-10-16
#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 <= n,m <= 109
1 <= k <= 1000

所以在上面的代码中:

在某些情况下,我在上面的代码中遇到了分段错误。
它对于小输入可以正常运行,但对于大输入有问题。

问题指出 1 <= n,m <= 109

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

如果您不想要有关如何解决问题的任何提示,请立即停止阅读

提示:k的值小于1000,将所有火车轨道保存在一个矢量数组中,不会超过内存,然后尝试通过逐个浏览这些"k"轨道来添加安装灯柱的可用位置数量,思考一下如何做到这一点。

相关文章: