PTA引水入城

image.png

在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠。该国的行政区划十分特殊,刚好构成一个 N 行 M 列的矩形,如上图所示,其中每个格子都代表一座城市,每座城市都有一个海拔高度。

为了使居民们都尽可能饮用到清澈的湖水,现在要在某些城市建造水利设施。水利设施有两种,分别为蓄水厂和输水站。蓄水厂的功能是利用水泵将湖泊中的水抽取到所在城市的蓄水池中。因此,只有与湖泊毗邻的第 1 行的城市可以建造蓄水厂。而输水站的功能则是通过输水管线利用高度落差,将湖水从高处向低处输送。故一座城市能建造输水站的前提,是存在比它海拔更高且拥有公共边的相邻城市,已经建有水利设施。

由于第 N 行的城市靠近沙漠,是该国的干旱区,所以要求其中的每座城市都建有水利设施。那么,这个要求能否满足呢?如果能,请计算少建造几个蓄水厂;如果不能,求干旱区中不可能建有水利设施的城市数目。

输入格式:

输入的每行中两个数之间用一个空格隔开。

输入的第一行是两个正整数 N 和 M,表示矩形的规模;

接下来 N 行,每行 M 个正整数,依次代表每座城市的海拔高度。

输出格式:

输出有两行。

如果能满足要求,输出的第一行是整数 1 ,第二行是一个整数,代表最少建造几个蓄水厂;

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

输入样例1:

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

输出样例1:

1
1

样例说明1:

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

输入样例2:

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

输出样例2:

1
3

样例说明2:

image.png

上图中,在 3 个粗线框出的城市中建造蓄水厂,可以满足要求。以这 3 个蓄水厂为源头在干旱区中建造的输水站分别用 3 种颜色标出。当然,建造方法可能不唯一。

数据范围

image.png

题目大意:

有公共边的两个点,只能从大往小走,最上面都可以是起始点。

问能不能把最下面一排都走到?

思路:

从最上面一排开始跑,记录每个点能跑到的最下面一排左边界和右边界。

方法:

用记忆搜标记每个走到的点能到的最下面一排左边界和右边界。

当再次跑到此点时直接读取数值。

核心记忆搜代码:

void dfs(ll x ,ll y){//现在到哪个点 
	vis[x][y]=1;//标记此点已经来过 
	for(ll i = 0 ; i < 4 ; i ++){
		ll tx = x + dir[i][0];
		ll ty = y + dir[i][1];
		//下一个点不能走就直接跳过 
		if(tx < 1 || ty < 1 || tx > n || ty > m || v[x][y] <= v[tx][ty])continue;
		if(!vis[tx][ty])dfs(tx,ty);//继续搜没标记过的点 
		L[x][y] = min(L[x][y],L[tx][ty]);//记录此点能到的最小左端点 
		R[x][y] = max(R[x][y],R[tx][ty]);//记录此点能到的最大右端点 
	}
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl "\n"

const ll N = 5e2+7;
ll n,m;
ll v[N][N],L[N][N],R[N][N];//记录此点高度,记录此点能到的最小左端点,记录此点能到的最大右端点
bool vis[N][N];
ll dir[4][2]={0,1,1,0,0,-1,-1,0};

void dfs(ll x ,ll y){//现在到哪个点 
	vis[x][y]=1;//标记此点已经来过 
	for(ll i = 0 ; i < 4 ; i ++){
		ll tx = x + dir[i][0];
		ll ty = y + dir[i][1];
		//下一个点不能走就直接跳过 
		if(tx < 1 || ty < 1 || tx > n || ty > m || v[x][y] <= v[tx][ty])continue;
		if(!vis[tx][ty])dfs(tx,ty);//继续搜没标记过的点 
		L[x][y] = min(L[x][y],L[tx][ty]);//记录此点能到的最小左端点 
		R[x][y] = max(R[x][y],R[tx][ty]);//记录此点能到的最大右端点 
	}
}

void solve(){
	cin >> n >> m;
	memset(L,0x3f,sizeof L);
	memset(vis,0,sizeof vis);
	for(ll i = 1 ; i <= m ; i ++)
		L[n][i]=R[n][i]=i;
	for(ll i = 1 ; i <= n ; i ++)
		for(ll j = 1 ; j <= m ; j ++)
			cin >> v[i][j];
	ll cnt = 0 ,sum = 0;
	for(ll i = 1 ; i <= m ; i ++)
		if(vis[1][i])continue;
		else dfs(1,i);
	for(ll i = 1 ; i <= m ; i ++)//看最后一排是否有没有被连接的城市 
		if(!vis[n][i])sum++;
	if(sum){//如果最下面一排不能全部被连接到 
		cout << 0 << endl << sum << endl;
		return;
	}
	ll l = 1,r;
	while(l <= m){//拼接能让最后一排都连接所需要的最少点 
		r=0;
		for(ll i = 1 ; i <= m ; i ++)
			if(L[1][i] <= l)r=max(r,R[1][i]);
		cnt++;
		l=r+1;
	}
	cout << 1 << endl << cnt << endl;
	return ;
}

int main(){
	ll t=1;//cin >> t;
	while(t--)solve();
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段&#xff0c;应用服务通常是部署在开发环境&#xff0c;在有数据回调的开发场…

百度百科词条创建流程是怎样的?

百度百科词条&#xff0c;作为当今权威的知识分享平台之一&#xff0c;越来越多的个人和企业希望自己在百度百科上拥有独立的词条。如何创建一个高质量的百度百科词条呢&#xff1f;本文伯乐网络传媒将为您详细解析百度百科词条的创建流程及编辑技巧&#xff0c;并提供一些常见…

【YOLOv5改进系列(4)】高效涨点----添加可变形卷积DCNv2

可变形卷积 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 什么是可变形卷积二、2️⃣如何在yolov5中添加DCNv2模块2.1 &#x1f393; 修改common.py模块2.2 ✨修改yolo.py文件2.3 ⭐️修改yolov5s.yaml文件2.4 &#x1f3af;训练可能报错结果 三、3️⃣DCNv2实验结果…

【好书推荐3】Python网络爬虫入门到实战

【好书推荐3】Python网络爬虫入门到实战 写在最前面内容简介作者简介目录前言/序言 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&#xff0c;挖掘无限可能&#xff…

关于《海岛奇兵》中n点能量可造成最大伤害的计算

最近在玩海岛奇兵, 里面有 武器A, 第n次使用消耗(10 6 * (n - 1))点能量并造成18315伤害; 武器B, 第n次使用消耗 (3 2 * (n - 1))点能量并造成8124伤害, 就想着能不能写一个程序计算一下, 当有x点能量时, 可造成的最大伤害是多少? 分别使用AB武器各多少次? 讨论: https://…

《仙剑7》登陆Xbox主机平台年末大作空窗期

首发一年后&#xff0c;《仙剑奇侠传7》终于登陆Xbox主机平台&#xff0c;而这也恰逢Xbox平台年末大作的窗口期。 随着年底大作的稀缺&#xff0c;以及海外3A RPG《星空》的延期&#xff0c;2022年底的这段时间给Xbox玩家体验《刀剑7》留下了一段空白。 可以说是因祸得福。 《仙…

微服务的可观测性

微服务是是一个大型的分布式系统&#xff0c;服务之间相互依赖支撑系统功能。同时对微服务系统的监控也是微服务体系的重要组成分。对微服务系统的监控主要分为三大部分&#xff0c;Trace追踪&#xff0c;Metrics指标&#xff0c;Log日志。 这三大部分几乎记录了微服务的前部信…

Stable Diffusion之核心基础知识和网络结构解析

Stable Diffusion核心基础知识和网络结构解析 一. Stable Diffusion核心基础知识1.1 Stable Diffusion模型工作流程1. 文生图(txt2img)2. 图生图3. 图像优化模块 1.2 Stable Diffusion模型核心基础原理1. 扩散模型的基本原理2. 前向扩散过程详解3. 反向扩散过程详解4. 引入Late…

【linux】进程地址空间(进程三)

目录 快速了解&#xff1a;引入最基本的理解&#xff1a;细节&#xff1a;如何理解地址空间&#xff1a;a.什么是划分区域&#xff1a;b.地址空间的理解&#xff1a; 为什么要有进程空间&#xff1f;进一步理解页表与写时拷贝&#xff1a; 快速了解&#xff1a; 先来看这样一段…

算法系列--两个数组的dp问题(1)

&#x1f495;"低头要有勇气&#xff0c;抬头要有底气。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–两个数组的dp问题(1) 大家好,今天为大家带来的是算法系列--两个数组的dp问题(1),两个数组的dp问题在动态规划问题中属于较难的部分…

c++之旅第八弹——多态

大家好啊&#xff0c;这里是c之旅第八弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 一&#xff0…

AI研报:从Sora看多模态大模型发展

《从Sora看多模态大模型发展》的研报来自浙商证券&#xff0c;写于2024年2月。 这篇报告主要探讨了多模态大模型的发展趋势&#xff0c;特别是OpenAI发布的视频生成模型Sora&#xff0c;以及其对行业发展的影响。以下是报告的核心内容概述&#xff1a; Sora模型的发布&#x…

【C++航海王:追寻罗杰的编程之路】queue

目录 1 -> queue的介绍和使用 1.1 -> queue的介绍 1.2 -> queue的使用 1.3 -> queue的模拟实现 1 -> queue的介绍和使用 1.1 -> queue的介绍 queue的文档介绍 1. 队列是一种容器适配器&#xff0c;专门用于在FIFO(先进先出)上下文中操作&#xff0c;其…

C语言例4-4:putchar()函数的调用格式和使用的例子

代码如下&#xff1a; //putchar()函数的调用格式和使用的例子 #include<stdio.h> //编译预处理命令&#xff0c;即文件包含命令 int main(void) {char ch1N, ch2E, ch3W;putchar(ch1);putchar(ch2);putchar(ch3); //输出变量c1、c2和c3中的字符putchar(\n);putcha…

Protocol Buffers设计要点

概述 一种开源跨平台的序列化结构化数据的协议。可用于存储数据或在网络上进行数据通信。它提供了用于描述数据结构的接口描述语言&#xff08;IDL&#xff09;&#xff0c;也提供了根据 IDL 产生代码的程序工具。Protocol Buffers的设计目标是简单和性能&#xff0c;所以与 XM…

长安链共识算法切换:动态调整,灵活可变

#功能发布 长安链3.0正式版发布了多个重点功能&#xff0c;包括共识算法切换、支持java智能合约引擎、支持后量子密码、web3生态兼容等。我们接下来为大家详细介绍新功能的设计、应用与规划。 随着长安链应用愈加成熟与广泛&#xff0c;一些在生产中很实用的需求浮出水面。长安…

MySQL进阶-----索引的结构与分类

目录 前言 一、认识索引 二、索引结构 1.概述 2. 二叉树 3 .B-Tree 4.BTree 5.Hash 三、索引的分类 1 .索引分类 2 .聚集索引&二级索引 前言 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维…

基于nginx 动态 URL反向代理的实现

背景&#xff1a; 我们在项目中在这样一个场景&#xff0c;用户需要使用固定的软件资源&#xff0c;这些资源是以服务器或者以容器形式存在的。 资源以webAPI方式在内网向外提供接口&#xff0c;资源分类多种类型&#xff0c;每种类型的资源程序和Wapi参数都一样。这些资源部属…

javaWeb在线考试系统

一、简介 在线考试系统是现代教育中一项重要的辅助教学工具&#xff0c;它为学生提供了便捷的考试方式&#xff0c;同时也为教师提供了高效的考试管理方式。我设计了一个基于JavaWeb的在线考试系统&#xff0c;该系统包括三个角色&#xff1a;管理员、老师和学生。管理员拥有菜…

ubuntu2004自动更新内核导致nvidia驱动无法正常启动的问题

症状 开机后&#xff0c;nvidia-smi无法正常显示显卡状态&#xff0c;另外无法连接多个显示屏 解决 参考这个文章&#xff1a; ls /usr/src可以看到已安装的nvidia驱动版本是nvidia-535.54.03 然后运行下面的指令&#xff1a; sudo apt-get install dkmssudo dkms instal…