运行 这个 hackerrank Gridland metro 的解决方案时我遇到了分段错误
I am getting segmentation fault while running this hackerrank Gridland metro's solution
#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
所以制作一个像[n][m]这样的数组会占用太多内存,这就是为什么你会得到分段错误,想一个不同的方法来解决它...
如果您不想要任何有关如何解决问题的提示,请立即停止阅读
HINT : k的值小于1000,将所有火车轨道保存在一个向量数组中,不会超出内存,然后尝试添加可用位置数要通过这些 'k' 轨道一条一条地安装灯柱,想一想如何做到这一点。
#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
所以制作一个像[n][m]这样的数组会占用太多内存,这就是为什么你会得到分段错误,想一个不同的方法来解决它...
如果您不想要任何有关如何解决问题的提示,请立即停止阅读
HINT : k的值小于1000,将所有火车轨道保存在一个向量数组中,不会超出内存,然后尝试添加可用位置数要通过这些 'k' 轨道一条一条地安装灯柱,想一想如何做到这一点。