【NOIP提高组】引水入城

【NOIP提高组】引水入城


💐The Begin💐点点关注,收藏不迷路💐

在这里插入图片描述

在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 市,每座城市都有一个海拔高度。 为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施 有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的 蓄水池中。因此,只有与湖泊毗邻的第1行的城市可以建造蓄水厂。而输水站的功能则是通 过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是 存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。 由于第N行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利 设施。那么,这个要求能否满足呢?如果能,请计算最少建造几个蓄水厂;如果不能,求干 旱区中不可能建有水利设施的城市数目。

输入

输入的每行中两个数之间用一个空格隔开。 输入的第一行是两个正整数N和M,表示矩形的规模。 接下来N行,每行M个正整数,依次代表每座城市的海拔高度。输入的每行中两个数之间用一个空格隔开。 输入的第一行是两个正整数N和M,表示矩形的规模。 接下来N行,每行M个正整数,依次代表每座城市的海拔高度。

输出

输出有两行。如果能满足要求,输出的第一行是整数1,第二行是一个整数,代表最少 建造几个蓄水厂;如果不能满足要求,输出的第一行是整数0,第二行是一个整数,代表有 几座干旱区中的城市不可能建有水利设施。

样例输入

2 5
9 1 5 4 3
8 7 6 1 2

样例输出

1
1

提示

【样例说明】只需要在海拔为9的那座城市中建造蓄水厂,即可满足要求。

在这里插入图片描述

C语言实现:

#include <stdio.h>
#include <string.h>// 定义二维数组的最大维度,可根据实际需求调整
#define MAX_SIZE 520// 存储地形高度信息的二维数组
int h[MAX_SIZE][MAX_SIZE];
// 用于标记每个位置是否已被访问的二维数组
int vis[MAX_SIZE][MAX_SIZE];
// 记录从每个位置出发能到达的最左列索引的二维数组
int l[MAX_SIZE][MAX_SIZE];
// 记录从每个位置出发能到达的最右列索引的二维数组
int r[MAX_SIZE][MAX_SIZE];
// 定义四个方向的偏移量,用于在二维数组中移动
int fx[4][2] = { {0, -1}, {-1, 0}, {1, 0}, {0, 1} };
// 用于计数的变量,根据不同情况有不同用途
int cnt;
// 存储二维数组的行数和列数
int n, m;
// 标记是否能从第一行到达最后一行所有位置的标志变量
int flag = 1;// 深度优先搜索函数,用于遍历二维数组
void dfs(int x, int y) {vis[x][y] = 1; // 标记当前位置 (x, y) 已被访问int xx, yy;// 遍历四个方向for (int i = 0; i < 4; i++) {xx = x + fx[i][0];yy = y + fx[i][1];// 判断新位置是否在合法范围内if (xx < 1 || yy < 1 || xx > n || yy > m) continue;// 如果当前位置的高度小于等于新位置的高度,跳过if (h[x][y] <= h[xx][yy]) continue;// 如果新位置未被访问,则递归调用dfs继续探索if (!vis[xx][yy]) dfs(xx, yy);// 更新当前位置能到达的最左列索引l[x][y] = l[x][y] < l[xx][yy]? l[x][y] : l[xx][yy];// 更新当前位置能到达的最右列索引r[x][y] = r[x][y] > r[xx][yy]? r[x][y] : r[xx][yy];}
}int main() {// 读取二维数组的行数和列数scanf("%d %d", &n, &m);// 初始化l数组为较大的值,这里使用0x3f作为较大值的表示memset(l, 0x3f, sizeof(l));// 初始化最后一行的最左列索引和最右列索引为对应的列号for (int i = 1; i <= m; i++) {l[n][i] = r[n][i] = i;}// 读取二维数组中的地形高度信息for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {scanf("%d", &h[i][j]);}}// 从第一行的每个位置开始进行深度优先搜索for (int i = 1; i <= m; i++) {if (!vis[1][i]) dfs(1, i);}// 检查最后一行的每个位置是否都被访问到for (int i = 1; i <= m; i++) {if (!vis[n][i]) {flag = 0;cnt++;}}// 如果最后一行存在未被访问到的位置if (flag == 0) {printf("0\n%d", cnt);return 0;}// 用于逐步扩展覆盖范围的变量,表示当前覆盖范围的最左列int left = 1;while (left <= m) {int maxr = 0;// 遍历第一行的每个位置for (int i = 1; i <= m; i++) {if (l[1][i] <= left) {maxr = maxr > r[1][i]? maxr : r[1][i];}}cnt++;left = maxr + 1;}printf("1\n%d", cnt);return 0;
}

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

apache poi 实现下拉框联动校验

apache poi 提供了 DataValidation​ 接口 让我们可以轻松实现 Excel 下拉框数据局校验。但是下拉框联动校验是无法直接通过 DataValidation ​实现&#xff0c;所以我们可以通过其他方式间接实现。 ‍ 步骤如下&#xff1a; 创建一个隐藏 sheet private static void create…

盘点和嗨格式一样好用的10款数据恢复!!

亲爱的朋友们&#xff0c;相信大家都知道&#xff0c;一旦不小心删除了重要文件或者遇到了硬盘故障&#xff0c;心情简直如同坐过山车一般此起彼伏&#xff0c;那么这个时候就需要一款好的数据恢复工具来解救我们的数据危机。今天就来给大家推荐嗨格式数据恢复以及另外这10款我…

【Python】怎么创建一个新的conda环境,并在其中安装所需的软件包

最近在运行前同事留下的包的时候&#xff0c;遇到了numpy包和pandas包不匹配的问题&#xff0c;见前一篇&#xff1a; 屋漏偏逢连夜雨&#xff0c;今天打开spyder的时候&#xff0c;也没法运行spyder了。 于是&#xff0c;痛定思痛&#xff0c;打算换一个conda环境&#xff0…

通讯录(C 语言)

目录 一、通讯录设计思路1. 伪代码设计思路2. 代码设计思路 二、代码实现三、程序运行演示四、整体分析 一、通讯录设计思路 1. 伪代码设计思路 通讯录可以用来存储 100 个人的信息&#xff0c;每个人的信息包括&#xff1a;姓名、性别、年龄、电话、住址。 提供方法&#x…

海明码校验和纠错

1.计算1011海明码的校验位 根据公式nk<-1 &#xff08;n是信息码位数&#xff0c;1011就是4&#xff09; 则 k3 43<-1 由上可知校验码有3个 又因为 4 2 1 可以列出下列表格 7654321d3d2d1x2d0x1x01011 x0 x1 x2 分别为3个校验码的位置 又因为 7421 642 541…

SpringMVC的执行流程以及运行原理

文章目录 SpringMVC的执行流程以及运行原理一、引言二、SpringMVC核心组件与执行流程1、SpringMVC核心组件1.1、DispatcherServlet配置 2、SpringMVC执行流程 三、SpringMVC配置文件及注解四、总结 SpringMVC的执行流程以及运行原理 一、引言 SpringMVC作为Spring框架的核心模…

Unity XR Interaction Toolkit 开发教程(4)XR Origin:追踪参考系与相机高度【3.0以上版本】

获取完整课程以及答疑&#xff0c;工程文件下载&#xff1a; https://www.spatialxr.tech/ 视频试看链接&#xff1a; 4.XR Origin&#xff1a;追踪参考系与相机高度【Unity XR Interaction Toolkit 跨平台开发教程】&#xff08;3.0以上版本&#xff09; 系列教程专栏&#…

【基于Zynq FPGA对雷龙SD NAND的测试】

一、SD NAND 特征 1.1 SD 卡简介 雷龙的 SD NAND 有很多型号&#xff0c;在测试中使用的是 CSNP4GCR01-AMW 与 CSNP32GCR01-AOW。芯片是基于 NAND FLASH 和 SD 控制器实现的 SD 卡。具有强大的坏块管理和纠错功能&#xff0c;并且在意外掉电的情况下同样能保证数据的安全。 …

小程序与服务器通信webSocket和UDPSocket

UDPSocket 官方文档链接UDPSocket webSocket 官方文档链接 WebSocket 任务 先用webSocket 测试成功后&#xff0c;由于WSS的问题最后决定用UDPSocket&#xff0c;两个都记录一下。 UDPSocket 项目里主要就使用了以下几个方法, 先用wx.createUDPSocket创建UDP Socket 实例&a…

HTMLCSS:爱上班的猫咪

这段HTML和CSS代码是一个SVG动画的示例&#xff0c;它描述了一个包含猫咪和笔记本电脑的复杂场景 HTML <div class"content"><div class"container"><svg id"bongo-cat" xmlns"http://www.w3.org/2000/svg" xmlns:x…

使用SearXNG-搭建个人搜索引擎(附国内可用Docker镜像源)

介绍 SearXNG是聚合了七十多种搜索服务的开源搜索工具。我们可以匿名浏览页面&#xff0c;不会被记录和追踪。作为开发者&#xff0c;SearXNG也提供了清晰的API接口以及完整的开发文档。 部署 我们可以很方便地使用Docker和Docker compose部署SearXNG。下面给出Docker部署Se…

基于前后端分离架构,SaaS云平台与私有云部署的智慧校园源码,java电子班牌源码

基于前后端分离架构&#xff0c;SaaS云平台与私有云部署的智慧校园源码&#xff0c;java电子班牌源码&#xff0c;自主研发&#xff0c;自主版权&#xff0c;上百个学校应用案例&#xff0c;支持二次开发。 在信息技术飞速发展的今天&#xff0c;教育领域也迎来了一场革命性的变…

java.lang.NoClassDefFoundError: kotlin/jvm/JvmInline

springboot项目&#xff0c;调用接口时&#xff0c;报这个错误&#xff0c;跟踪断点发现数据库也查询到了数据&#xff0c;就是在返回时报错了&#xff0c;后来一看是pom.xml中引入了 <dependency><groupId>com.fasterxml.jackson.module</groupId><artif…

yolov8涨点系列之替换幽灵卷积GhostConv

文章目录 核心思想主要步骤优势yolov8.yaml文件增加CBAMyolov8.yamlyolov8.yaml将Conv卷积替换成GhostConv 幽灵卷积&#xff08;Ghost Conv&#xff09;是一种新颖的卷积操作方法&#xff0c;旨在解决传统卷积神经网络中参数量和计算量过大的问题&#xff0c;尤其适用于资源受…

MongoDB Shell 基本命令(三)聚合管道

管道含义 类似Linux中的管道&#xff0c;前一个命令的输出作为后一个命令的输入。 显示网络连接、路由表和网络接口统计信息 netstat -ano -netstat:network statistics 网络统计 -a:显示所有连接和监听端口&#xff0c;包括所有活动的TCP和UDP连接。 -n:以数字形式显示地址…

C++重启/秋招已保底备战春招

C面向对象高级开发&#xff08;上&#xff09;学习笔记 第三节&#xff1a; 问题1&#xff1a;C中对构造函数使用初始列和函数体中赋值结果是一样的&#xff0c;但是为什么使用初始列的形式更好 解答&#xff1a;最重要的还是1和2&#xff0c;效率更高避免调用默认构造函数&…

云渲染怎么用?一片看懂云渲染渲染农场渲染100操作指南

就拿“渲染 100”云渲染来说吧&#xff0c;它的使用教程是这样的&#xff1a; 1.安装客户端 在渲染之前要准备好安装“渲染 100”云渲染客户端&#xff0c;注册个账号然后登录客户端。 您可以在浏览器里打开渲染 100 云渲染的官网&#xff1a;xuanran100.com/?ycode5858, 在…

私有化视频平台EasyCVR海康大华宇视视频平台视频诊断技术是如何实时监测视频质量的?

在现代视频监控系统中&#xff0c;确保视频流的质量和稳定性至关重要。随着技术的进步&#xff0c;视频诊断技术已经成为实时监测视频质量的关键工具。这种技术通过智能分析算法对视频流进行实时评估和处理&#xff0c;能够自动识别视频中的各种质量问题&#xff0c;并给出相应…

ECRS工时分析软件:工业工程优化利器,引领生产工序革新

在竞争日益激烈的工业领域&#xff0c;生产效率的提升成为企业持续发展的关键。为此&#xff0c;工业工程学中的程序分析原则应运而生&#xff0c;其中最为核心的便是ECRS四大原则——取消、合并、调整顺序和简化。这些原则为生产工序的优化提供了有力的指导&#xff0c;旨在消…

端侧小模型新星,SmolLM2 1.7B击败了Llama 3.2、Qwen 2.5

SmolLM2开源了&#xff1a;更快、更好、更便宜&#xff0c; 包含三个尺寸&#xff1a;135M、360M 和 1.7B。 端侧小型语言模型新星——SmolLM2 1.7B击败了Qwen 2.5 1.5B和Llama 3.2 1B&#xff1a; Apache 2.0许可 训练于11万亿个令牌 在FineWeb-Edu、DCLM、The Stack以及新的…