牛客「土」秘法地震(二维前缀和)

帕秋莉掌握了一种土属性魔法 

这种魔法可以在一片k×k大小的一个正方形区域内产生地震

但是如果某片即将产生地震的区域内有建筑物,帕秋莉会停止施法

整个地图大小为n×m,其中一些地方有建筑

请问有多少种可能的情况,使得帕秋莉会停止施法

输入描述:

第一行三个数n, m, k,意义见描述
接下来一个n×m的01矩阵表示这篇区域的情况,1表示这个地方有建筑

输出描述:

输出一个数表示答案

示例1

输入

4 4 2
1000
0100
0000
0001

输出

5

备注:

对于30%的数据,n, m≤30
对于100%的数据,n, m≤1000,k≤min(n, m)

二维前缀和模板

#include
using namespace std;
char a[1001][1001];
int b[1001][1001];
int main()
{
	int n,m,k;
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++){
		cin>>a[i][j];
		b[i][j]=a[i][j]-'0';
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+b[i][j];
		}
	}
	int res=0; 
	for(int i=k;i<=n;i++){
		for(int j=k;j<=m;j++){
			if(b[i][j]-b[i-k][j]-b[i][j-k]+b[i-k][j-k]!=0)
			res++;
		}
	}
	cout<

你可能感兴趣的:(算法,c++)