题目描述:
某大会议室有 N 行 M 列的座位,开会时发现有些座位是空的。现在想知道连续一片矩形区域内有多少空位。
例如: N=3,M=4,下面格子中 1 表示有人, 0 表示空。
输入格式:
第一行 2 个正整数: N 和 M,范围在[1, 1500]。
下面 N 行,每行 M 个整数: 0 或 1。
紧接着,一个整数k,表示有k个询问( k<=1000 )。
下面有K行,每行四个整数x1,y1,x2,y2,表示一个矩形的左上角和右下角。
输出格式:
共k行。
针对每个询问,输出一个答案,一个询问输出一行。
样例输入:
3 4 1 0 1 1 1 1 0 0 0 1 1 1 2 1 1 3 4 2 3 3 4
样例输出:
4 2
时间限制: 1000ms
空间限制: 256MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
int m,n,a[1501][1501],s[1501][1501]={},sum=0;
int k,x1,x2,y,y2;
int main(){
cin>>m>>n;
for(int i=1;i<=m;i++){
sum=0;
for(int j=1;j<=n;j++){
cin>>a[i][j];
if(a[i][j]==0){
sum++;
}
if(i==1){
s[i][j]=sum;
}else{
s[i][j]=sum+s[i-1][j];
}
}
}
cin>>k;
for(int i=1;i<=k;i++){
cin>>x1>>y>>x2>>y2;
cout<<s[x2][y2]-s[x1-1][y2]-s[x2][y-1]+s[x1-1][y-1]<<endl;
}
return 0;
}