「土」秘法地震

「土」秘法地震

https://ac.nowcoder.com/acm/contest/20960/1025

链接:https://ac.nowcoder.com/acm/contest/20960/1025
来源:牛客网

题目描述

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

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

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

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

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

输入描述:

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

输出描述:

输出一个数表示答案
示例1

输入

复制 4 4 2 1000 0100 0000 0001
4 4 2
1000
0100
0000
0001

输出

复制 5
5

备注:

对于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;
}


全部评论

相关推荐

珩珺:那些经历都太大太空了,实习的情况不了解,大创项目连名字、背景、目的及意义都没体现出来;地摊经济更是看完连卖的什么产品都不知道,项目成果直接写营收多少都更直观真实一点;后面那个校文体部的更是工作内容是组织活动整理流程,成果变成了当志愿者,而且你们学校本科学生会大一入学就直接当部长吗,志愿里面还提到了疫情防控,全面解封是22年12月的事情,可能时间上也有冲突。可能你花了钱人家就用AI给你随便写了点内容改了一下,没什么体现个性化的点
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务