题意:在n*m大小的图中有地雷1,在 k * k 的范围内不能有数字为1的地雷 ,如果有情况res++,否则res不变;

题解 : 本题用二维前缀和思路用区域右下角的点为地雷数量,如果数量大于1则res++;

#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int f[N][N];
char str[N];
int n,m,k;

int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
    {  scanf("%s",str+1);
        for(int j=1;j<=m;j++)
           f[i][j]=str[j]-'0';
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            f[i][j]=f[i][j]+f[i-1][j]+f[i][j-1]-f[i-1][j-1];//前缀和公式
  
    int res=0;
    //从[k][k]开始;
    for(int i=k;i<=n;i++)
         for(int j=k;j<=m;j++)
         {    
             int x;
          x=f[i][j]-f[i-k][j]-f[i][j-k]+f[i-k][j-k];//范围为K,所以i-k,j-k;
             if(x>0) res++;
         }
/*2 1 0 
  1 1 0 
  0 0 1   [k][k]到[n][m]的地雷数情况*/ 
    cout<<res<<endl;
    return 0;    
}