WZOI-371缺席多少人 3

题目描述:

某大会议室有 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;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值