链接:https://ac.nowcoder.com/acm/contest/20960/1025
来源:牛客网
来源:牛客网
题目描述
帕秋莉掌握了一种土属性魔法
这种魔法可以在一片k×k大小的一个正方形区域内产生地震
但是如果某片即将产生地震的区域内有建筑物,帕秋莉会停止施法
整个地图大小为n×m,其中一些地方有建筑
请问有多少种可能的情况,使得帕秋莉会停止施法
输入描述:
第一行三个数n, m, k,意义见描述 接下来一个n×m的01矩阵表示这篇区域的情况,1表示这个地方有建筑
输出描述:
输出一个数表示答案
备注:
对于30%的数据,n, m≤30 对于100%的数据,n, m≤1000,k≤min(n, m)直接使用二维前缀和,若区域里面的数和大于0,则停止施法。然后记录总数即可。
#include <bits/stdc++.h> typedef long long ll; #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) using namespace std; const int MAXN = 1004; int a[MAXN][MAXN]; int main() { int n, m, k; cin>>n>>m>>k; for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { scanf("%1d", &a[i][j]); a[i][j] += a[i-1][j]+a[i][j-1]-a[i-1][j-1]; } } int cnt = 0; for (int i=k;i<=n;i++) { for (int j=k;j<=m;j++) { int sum = a[i][j]; if (i-k>0) sum-=a[i-k][j]; if (j-k>0) sum-=a[i][j-k]; if (i-k>0&&j-k>0) sum+=a[i-k][j-k]; if (sum>0) cnt++; } } cout<<cnt; return 0; }