链接:

文章目录

  • 题目描述
  • 题解:
  • 代码:
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

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

这种魔法可以在一片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)

题解:

关于二维前缀和的题目
我们都知道一维前缀和,二维前缀和就是在一维的基础上建立的,可以通过二维前缀和求出矩阵内一个任意的子矩阵的数的和。
dp [ i ] [ j ] 表示表示一个矩阵内数的总和
(1,1)与(i,j)这两个点分别为这个矩阵的左上角,和右下角。
状态转移方程为
dp [ i ] [ j ] = d p [ i - 1 ] [ j ] + dp [ i ] [j - 1 ] - d p [ i - 1 ] [ j -1 ] + a [ i ] [ j ]

大致可以理解成:整个矩形区域=左边区域(1,1)~ (i,j-1)+上面区域(1,1)~(i-1,j),减去重复区域(红色部分),再加上蓝色部分( 当前点( i , j ))
图片选自

放在本题
当矩阵某点 ( i , j ) 的值为1时,dp [ i ] [ j ] ++
然后求出二维前缀和的值,
然后我们可以通过这些值求出 矩阵的大小是固定的 k * k 的情况是否符合要求

我们枚举正方形右下角的点 ( i , j )
对于(1,1)到(i,j)的矩阵,
sum=dp [ i+k−1 ] [ j+k−1 ]− dp [ i+k−1 ][ j−1 ]−dp [ i−1 ][ j+k−1 ]+dp [ i − 1 ] [ j− 1 ]
可以理解成二维前缀和的那个式子倒过来,
用(i,j)的二维前缀和,也就是图中整个矩形,减去上部分,再减去左部分,加上被多减的红色部分,剩下的就是蓝色部分,也就是我们所求的k*k大的矩阵
sum>0,说明符合条件,结果加一

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+4;
char a[maxn][maxn];
int dp[maxn][maxn];
int n,m,k;
int main()
{int sum=0;cin>>n>>m>>k;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>a[i][j];}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){dp[i][j]+=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1];if(a[i][j]=='1')dp[i][j]++;}for(int i=k;i<=n;i++)for(int j=k;j<=m;j++){if(dp[i][j]-dp[i-k][j]-dp[i][j-k]+dp[i-k][j-k])sum++;}cout<<sum<<endl;return 0;
}

牛客网【每日一题】5月18日 「土」秘法地震相关推荐

  1. 牛客网 每日一题 7月23日题目精讲—wpy的请求

    来源:牛客网: 文章目录 wpy的请求 题解: 代码: wpy的请求 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K Special Judge ...

  2. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  3. 2021-09-02牛客网每日10题--前端

    3 ng-class是做什么用的? 给元素绑定类名 eg:用法①: // An highlighted block <div ng-class="{'A':isA,'B':isB,'C ...

  4. 牛客网SQL刷题笔记(MySQL)

    牛客网SQL刷题笔记(MySQL) 此博客集合LeetCode.牛客网常见的题型及其解法,侵删 目录 牛客网SQL刷题笔记(MySQL) 类型1:查找排名第几的数据 SQL2 查找入职员工时间排名倒数 ...

  5. 牛客网Java刷题知识点之关键字static、static成员变量、static成员方法、static代码块和static内部类...

    不多说,直接上干货! 牛客网Java刷题知识点之关键字static static代表着什么 在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个"伪全局"的概 ...

  6. 牛客网Java刷题知识点之构造函数可以调用一般函数,但是一般函数不可以直接调用构造函数...

    不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...

  7. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合...

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  8. 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别

    不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...

  9. 牛客网Veirlog刷题答案目录(持续更新)

    牛客网Veirlog刷题答案目录(持续更新) 基础篇 进阶篇 基础篇 1.VL1--四选一多路选择器 2.VL2--异步复位的串联T触发器 3.VL3--奇偶校验 4.VL4--移位运算与乘法 5.V ...

最新文章

  1. 22张精炼图笔记,深度学习专项学习必备
  2. 【Android 逆向】Android 系统文件分析 ( 根目录下的目录和文件 | /data/ 应用和用户数据目录 | /mnt/ 挂载其它设备目录 )
  3. 误用.Net Redis客户端工具CSRedisCore,自己挖坑自己填
  4. C语言的细小知识点整理
  5. Servlet的学习之Request请求对象(2)
  6. python打印二进制内容_在python中打印出c类型的二进制表示
  7. java数组转对象_java将对象数组列表转换为POJO
  8. python中文怎么读-python的读法
  9. c#自定义可拖动变形控件
  10. python 车牌识别简单_简单30行Python代码让你玩转YOLO目标识别检测!
  11. 【c++ | 谭浩翔】第四章练习
  12. 国外英文版云购夺宝网站项目开发制作代码解析
  13. sql中别名as,不写,以及使用双引号总结
  14. 快速构建属于自己的博客网站
  15. 启动docker时映射到宿主机时出现 /usr/bin/docker-current: Error response from daemon: driver failed……的解决方案
  16. ” Microsoft.Office.Interop.Excel”无法引用
  17. Rockchip WIFI 配置说明
  18. NAVICAT 还原mssql bak备份文件
  19. Swift实战-豆瓣电台(四)歌曲列表的展现
  20. web端加载百度地图和天地图

热门文章

  1. 我背着女朋友,用 Python 偷偷抓取了她的行踪
  2. 超赞的“数据与算法之美”资料分享!
  3. 震惊整个世界的新发现,科学界的大骗局
  4. 通过听力写代码?盲人程序员就是这样做的
  5. 把握人工智能命脉的有效方法
  6. java 生成jar_java如何生成jar
  7. html语言可以写模版继承吗,Django框架(十一):模板介绍、模板语言、模板继承、HTML转义...
  8. 混凝土墙开洞_满城混凝土柱子切割资质齐全
  9. 米家扫地机器人充满电需要多长时间_米家扫地机器人充满电后能工作多久?
  10. 算法 - DFS/BFS