题目描述:
链接:https://ac.nowcoder.com/acm/problem/53676
来源:牛客网

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

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

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

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

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

具体思路
二维前缀和上线啦~
求前缀和后判断k*k地震范围中有无建筑物,如有,ans++.
看到这里的你,
是否脑海中依稀残存着某个身影,
用着轻柔的声音,
轻轻提醒着你,
是否有那么一道题,
窝在你的题库中静静看着你,
没错,少年郎,你是否遇见过激光炸弹【以上可以当作废话处理】

  • 一个虚假的科普
    我曾经为激光炸弹绘过一幅图
    我决定把它放上来
    /*  ________________________________
      |               |                |
      |               |                | 
      |               |                |
      |               |                | 
      |               |                |
      |_______________|________________|
      |               |                | 
      |               |                | 
      |               |      这一块 ——  |——f[i][j]-f[i-r][j]-f[i][j-r]+f[i-r][j-r] 
      |               |                |
      |               |                | 
      |               |                | 
      |_______________|________________| f[i][j]
    简陋的字符画
    代表着当初我犯的***r>这幅画
    可能会使我被愤怒的老师暗杀
    毕竟好好的题解
    不可能如此浮夸【doge】

不过没关系,根据这幅画我们不难看出,想要得知矩阵内kk正方形的前缀和,只需要用f[i][j]-f[i-k][j]-f[i][j-k]+f[i-k][j-k]
*
正方形前缀和=囊括该正方形的以大矩阵左上角为起点的最小矩阵的前缀和-左边的一块-上面的一块+两块中间重复的部分**
看!文字解释完更混乱了呢!【建议画图尝试!!!】

不过这也没关系
我们上代码:

#include<bits/stdc++.h>

using namespace std;

char AC;
int f[1005][1005],ans_[1005][1005];
int ans=0,n,m,r;

int main()
{
    memset(f,0,sizeof(f));

    scanf("%d%d%d", &n,&m,&r);

    if(r==0)
    {
        printf("0\n");

        return 0;
    }

    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){

            cin>>AC;
            ans_[i][j]=AC-'0';
        }
    }  

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            f[i][j]=ans_[i][j]+f[i][j]+f[i-1][j]+f[i][j-1]-f[i-1][j-1];//求前缀和
        }
    }

    for(int i=r;i<=n;i++)
    {
        for(int j=r;j<=m;j++)
        {
            if(f[i][j]-f[i-r][j]-f[i][j-r]+f[i-r][j-r]) {//如果这一块地的前缀和不为0,说明有建筑,ans++
                ans++;
            }
        }
    }

    printf("%d\n", ans);

    return 0;
}

看到这里
不知各位少年郎是否依旧懵逼
但没有关系
WA并不会让大脑死机
题解暂且就到这里
2.18打卡依旧给力(并未)
不论如何明日推题再会
bye!