#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
所以在上面的代码中:
对于某些情况,我在上面的代码中遇到了分段错误 它适用于小输入,但是对于大输入有问题。
答案 0 :(得分:0)
问题表明1 <= n,m <= 10 9
所以制作像[n] [m]这样的数组会占用太多内存,这就是为什么你会遇到分段错误,想一个不同的方法来解决它......
如果您不想要如何解决问题,请立即停止阅读
提示:k的值小于1000,保存矢量数组中的所有火车轨道,不会超过内存,然后尝试添加可用位置的数量以安装路灯柱一个接一个地浏览那些“k”曲目,想一想如何做到这一点。