题解:P11215 【MX-J8-T3】水星湖

好久没写题解了,交一发吧。

题目传送门

思路讲解

我们用一个结构体 struct 存储每一个格子的状态,tp 表示格子的类型,t 表示如果该格子种过树,种树的最近时间,die 表示如果该格子有树,这棵树会不会永远都不会死亡。

struct block{int tp,t;//0为空地,1为湖泊,2为种过树bool die;
}g[3003][3003];

首先我们要将每个是湖泊的格子的状态设为 1 1 1,容易想到用二维差分解决。

然后我们定义一个 bool 类型的二维数组 nl,表示该格子是否接近湖泊,方便我们决定它长出树后会不会永远不死。

对于每一次种树操作,我们进行 bfs 搜索,

  • 如果搜到一颗树,设这棵树被种下的时间为 x x x,如果这棵树在 t i t_i ti 这个时间有没有死亡,即 x + k ≥ t i x+k\ge t_i x+kti,或者这棵树本身就被标记为不死,则说明这相邻的两个树,永远都不会死亡。所以将它们标记为永远不死,并将该树的位置加入搜索的队列。

  • 如果搜到一块没有树且与湖泊相邻的陆地,则在这里长出一颗新的树,并将其标记为不死,因为它与湖泊相邻。并将搜到它的那棵树也标记为不死,因为它与一个不会死亡的树相邻,最后将搜到的树加入队列。

  • 否则不进行任何操作。

答案为所有不会死的树的数量。

代码实现

#include <bits/stdc++.h>
using namespace std;
struct block{int tp,t;bool die;
}g[3003][3003];
int di[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,q,r,k,cf[3003][3003],sum[3003][3003],ans;
bool nl[3003][3003];
void bfs(int t,int sx,int sy){queue<int> x,y;x.push(sx),y.push(sy);while(x.size()){int fx=x.front(),fy=y.front();x.pop(),y.pop();for(int i=0;i<4;i++){int xx=fx+di[i][0],yy=fy+di[i][1];if(xx>0 && yy>0 && xx<=n && yy<=m && g[xx][yy].tp!=1){if(g[xx][yy].tp==2){if(g[xx][yy].t+k>=t){if(g[xx][yy].die==false)g[xx][yy].die=1,ans++,x.push(xx),y.push(yy);if(g[fx][fy].die==false)g[fx][fy].die=1,ans++;}if(g[xx][yy].die)if(g[fx][fy].die==false)g[fx][fy].die=1,ans++;}else if(nl[xx][yy]){g[xx][yy]={2,0,1};ans++;if(g[fx][fy].die==false)g[fx][fy].die=1,ans++;x.push(xx),y.push(yy);}}}}
}
int main(){scanf("%d%d%d%d%d",&n,&m,&q,&r,&k);for(int i=0;i<q;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);cf[a][b]++,cf[a][d+1]--,cf[c+1][b]--,cf[c+1][d+1]++; //差分}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){sum[i][j]=cf[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];//统计前缀和if(sum[i][j])nl[i-1][j]=nl[i+1][j]=nl[i][j-1]=nl[i][j+1]=1;//如果该位置为湖泊,则设置和它相邻的所有nl为trueg[i][j]={sum[i][j],0,false};//初始化}for(int i=0;i<r;i++){int t,x,y;scanf("%d%d%d",&t,&x,&y);g[x][y]={2,t,nl[x][y]};ans+=nl[x][y];//如果该位置与湖泊相邻,则将其标记为不死bfs(t,x,y);}printf("%d",ans);return 0;
}

完结撒花!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Offset Explorer 连接kafka使用SASL 进行身份验证详解

使用 Offset Explorer&#xff08;也称为 Kafka Tool&#xff09;3.0.1 连接到 Kafka 并通过 SASL 进行身份验证&#xff0c;可以按照以下步骤进行配置&#xff1a; 1. 确保 Kafka 配置支持 SASL 首先&#xff0c;确保你的 Kafka 集群已配置为支持 SASL。你需要在 server.pro…

笔记:weblogic升级及版本信息

官方文档 Patch Set Update (PSU) Release Listing for Oracle WebLogic Server (WLS) (Doc ID 1470197.1) 版本信息 12.2.1.412.2.1.312.2.1.212.2.1.112.2.1.012.1.3.012.1.2.012.1.1.010.3.610.3.510.3.4

【小白学机器学习17】 概率论的认识论和方法论

目录 1 分析概率问题的思路&#xff1a;三段论逻辑 2 学习概率时的三段论推导 1 分析概率问题的思路&#xff1a;三段论逻辑 现在很多辩证法&#xff0c;从黑格尔这继承&#xff0c;却变成了2段论&#xff0c;感觉缺乏一个桥梁&#xff0c;逻辑上思考问题的链条变难了基于一…

用python-pptx轻松统一调整演示文档配色方案

哈喽,大家好,我是木头左! 安装与准备:python-pptx入门 确保你的Python环境中已经安装了python-pptx库。如果没有,可以通过pip进行快速安装: pip install python-pptx此外,对于PPT文档的操作,了解一些基本的PowerPoint概念是有帮助的,比如幻灯片母版(Slide Master)…

基于微信小程序的购物系统【附源码、文档】

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

印章图片怎么抠出透明背景?这4个一键抠图工具建议收藏!

在处理印章图片时&#xff0c;背景色的存在往往成为影响使用效果的一大障碍&#xff0c;特别是在需要将印章与不同背景融合时&#xff0c;不透明的背景色会显得尤为突兀。为了应对这一挑战&#xff0c;市场上涌现了一系列高效的一键抠图工具&#xff0c;它们能够迅速将印章图片…

Scala的继承

Scala中的继承是指在原有的类的基础上定义一个新类&#xff0c;原有的类称为父类&#xff0c;新类成为子类 例&#xff1a; class Animal(){var leg4def run():Unit{println("animal run.....")} } //继承&#xff1a;不劳而获 class Dog extends Animal(){} object…

ORB-SLAM2 ---- Frame中在主函数中被调用的函数

文章目录 一、Frame::isInFrustum1. 函数讲解2. 源码 二、Frame::GetFeaturesInArea1. 函数讲解2. 函数源码 三、Frame::ComputeBoW1. 函数讲解2. 函数源码 四、Frame::UnprojectStereo1. 函数讲解2. 函数源码 五、总结 一、Frame::isInFrustum 1. 函数讲解 此函数判断地图点…

【Linux】进程池

目录 进程池 进程池的概念&#xff1a; 手搓进程池&#xff1a; 1、创建信道和子进程 2、通过channel控制子进程 3、回收管道和子进程 进程池 进程池的概念&#xff1a; 定义一个池子&#xff0c;在里面放上固定数量的进程&#xff0c;有需求来了&#xff0c;就拿一个池中…

05 go语言(golang) - 常量和条件语句

常量 在Go语言中&#xff0c;常量是使用 const 关键字定义的&#xff0c;并且一旦被赋值后&#xff0c;它们的值在程序运行期间不能改变。常量可以是字符、字符串、布尔或数值类型。 基本特性 不可修改&#xff1a;一旦一个常量被定义&#xff0c;它的值就不能被更新。编译时…

repo 命令大全详解(第十一篇 repo init)

repo forall 命令用于在指定的项目上执行给定的命令&#xff0c;非常适合批量操作。 参数分类及解释 基本参数 [<project>...]: 可选&#xff0c;指定要操作的项目。如果不指定&#xff0c;则对所有项目执行命令。 示例: repo forall my_project -c "git status&q…

YoloV10——专栏目录

摘要 &#x1f525;&#x1f680;本专栏教你如何嗨翻YoloV10&#xff01;&#x1f680;&#x1f525; &#x1f4a1;升级大招&#xff1a;汲取最新论文精华&#xff0c;给你一整套YoloV10升级秘籍&#xff01;包括但不限于&#xff1a;注意力加持、卷积大换血、Block革新、Ba…

微软运用欺骗性策略大规模打击网络钓鱼活动

微软正在利用欺骗性策略来打击网络钓鱼行为者&#xff0c;方法是通过访问 Azure 生成外形逼真的蜜罐租户&#xff0c;引诱网络犯罪分子进入以收集有关他们的情报。 利用收集到的数据&#xff0c;微软可以绘制恶意基础设施地图&#xff0c;深入了解复杂的网络钓鱼操作&#xff…

使用JMeter进行Spring Boot接口的压力测试

使用 Apache JMeter 对接口进行压力测试是一个相对简单的过程。以下是详细的步骤&#xff0c;包括安装、配置和执行测试计划。 1. 下载和安装 JMeter 下载 JMeter 从 JMeter 官方网站https://jmeter.apache.org/download_jmeter.cgi 下载最新版本的 JMeter。 解压缩 将下载的 …

记录一次部署 k8s 集群无法启动

情况是这样的&#xff0c;k8s 集群&#xff08;v1.31&#xff09;所需要的组件已安装完成&#xff0c;通过 kubeadm init 已经安装部署成功&#xff0c;但是等几分钟&#xff0c;集群组件就一直在重启&#xff0c;查看日志是连接 etcd 超时&#xff0c;所以查看了 etcd 的日志&…

MATLAB支持的字体

listfonts 列出可用的系统字体 {Adobe Devanagari } {Agency FB } {Algerian } {AlienCaret } {AMS } {Arial } {Arial Black …

微信小程序/uniapp动态修改tabBar信息及常见报错

目录 uni.setTabBarItem(options)介绍&#xff1a;参数&#xff1a;示例&#xff1a; 报错 uni.setTabBarItem(options) 介绍&#xff1a; wx.setTabBarItem是不支持修改url路径的&#xff0c;所以使用uniapp的API。 动态设置 tabBar 某一项的内容&#xff1a;uniapp官网 se…

炒股VS炒游戏装备,哪个更好做

这个项目&#xff0c;赚个10%都是要被嫌弃的 虽然天天都在抒发自己对股市的看法&#xff0c;但自己自始至终也没有买进任何一支股票。之所以对这个话题感兴趣&#xff0c;着实是因为手上的游戏搬砖项目也是国际性买卖&#xff0c;跟国际形势&#xff0c;国际汇率挂钩&#xff0…

确保Spring Boot定时任务只执行一次方案

在Spring Boot项目中&#xff0c;确保定时任务只执行一次是一个常见的需求。这种需求可以通过多种方式来实现&#xff0c;以下是一些常见的方法&#xff0c;它们各具特点&#xff0c;可以根据项目的实际需求来选择最合适的方法。 1. 使用Scheduled注解并设置极大延迟 一种简单…

C++游戏开发:从基础到进阶

引言 在游戏开发领域,C++无疑是最具影响力的编程语言之一。它的高效性、灵活性和对硬件资源的控制使其成为开发大型、高性能游戏的首选语言。诸如Unreal Engine、**Unity(部分使用)**等知名游戏引擎都依赖C++来处理复杂的游戏逻辑、物理引擎和图形渲染。 本文将详细介绍C+…