白令海峡的题解

news2024/11/24 20:14:14

目录

原题描述:

题目描述

输入格式

输出格式

样例输入

样例输出

样例解释

数据规模

主要思路:

小细节:

代码code:


原题描述:
 

时间限制: 1000ms

空间限制: 524288kB

题目描述

很久很久以前,一座大陆桥横跨西伯利亚东端与美洲大陆西端。

处于进化早期的人类,正以部落的形式在大陆上游荡、捕猎,四海为家。在饥饿与寒冷折磨下,人们不断迁徙。在不知不觉中,也许有一支队伍、也许有许多支队伍,跨过了大陆桥,来到了美洲大陆。人类繁衍与进化的脚步自此迈上了美洲大陆。

然而,板块位移,地质变迁,陆地慢慢被大海淹没,广阔的海峡将亚欧大陆和美洲大陆的人类分隔开来。也许是万年,也许是十万年,两岸的人类才能再度相见。

大陆架可以看作一个 n \times m 的矩形区域,区域内有一些格子已经被海洋所淹没。在接下来的q年里,区域内还有一些格子会逐个沉没。那么到底是哪一年两座大陆才会分隔开来呢?

输入格式

第一行一个整数 T 代表数据组数。

每组数据第一行两个整数 n 和 m,

接下来 n 行每行 m 个整数,为 1 表示已经被淹没,为 0 表示仍为陆地。

接下来一行一个整数 q,

接下来 q 行每行两个整数,表示沉没的格子坐标。

输出格式

每组数据输出一行,代表答案。如果 q 年之后还连通,输出-1

样例输入

1
4 6
011010
000010
100001
001000
7
0 3
1 5
1 3
0 0
1 2
2 4
2 1

样例输出

4

样例解释

到第 4 年,无法从上面到达下面。

第3年可以从上面走到下面,我们可以想象输入是一个连接着上方和下方的桥。

 第0年,我们可以这么走:

数据规模

1 \le T \le 10,1\le n,m \le 500,1\le q \le n\times m,0\le x\le n,0\le y\le m

主要思路:

这题你第一眼的感觉是否是对于每一年写个bfs判断能不能走到底,那我很荣幸的告诉你,恭喜你:TLE 0分。

有眼睛的人会先看一下数据范围(q<=n*m),接着看一下文章标签(二分),最后顺手来个三连

回归正题。

我们想,如果第mid年,不能从第一行走到第n行,那么mid+1~q年岂不是都不能从第一行到第n行(因为海水只会淹没更多的地方)

发现了啥???

没错单调性!!!

有单调性,你脑海里第一个会想到啥???

二分答案。

所以这题一切都简单了

但还有一个问题,二分找到的是可以从1走到n的情况(我是这样写的),所以ans不能直接=mid(因为mid不是答案)ans要=mid+1

小细节:

注意q的大小(n*m)所以数组要开500*500=250000

然后每次判断bfs的时候要vis清空,a数组的变化。

代码code:

#include<bits/stdc++.h>
using namespace std;
int t;
char a[1010][1010];
int vis[1010][1010];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int asd[1000010],fgh[1000010];
int n,m;
struct node
{
	int x,y;
};
int q;
bool bfs(int mid)
{
	memset(vis,0,sizeof(vis));
	queue<node> q1;
	for(int i=1;i<=min(mid,q);i++)//哪里被淹没了
	{
		vis[asd[i]][fgh[i]] = 1;
	}
	for(int i=0;i<m;i++)//哪里可以当起点
	{
		if(a[0][i] == '0'&&vis[0][i]!=1)
		{
			q1.push({0,i});
			vis[0][i] = 1;
		}
	}
	while(!q1.empty())//bfs
	{
		auto tmp = q1.front();
		q1.pop();
		if(tmp.x == n-1)
		{
			return 1;
		}
		for(int i=0;i<4;i++)
		{
			int tx=tmp.x+dx[i],ty=tmp.y+dy[i];
			if(tx<0||tx>=n||ty<0||ty>=m||vis[tx][ty]||a[tx][ty] == '1')
			{
				continue;
			}
			vis[tx][ty] = 1;
			q1.push({tx,ty});
		}
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>t;
	while(t--)
	{
		cin>>n>>m;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				cin>>a[i][j];
			}
		}
		cin>>q;
		int flag=1;
		for(int i=1;i<=q;i++)
		{
			cin>>asd[i]>>fgh[i];
		}
		int l=0,r=q+1;
		int ans=INT_MAX;//二分
		while(l<=r)
		{
			int mid=(l+r)/2;
			if(bfs(mid))
			{
				l = mid+1;
				ans = mid+1;
			}
			else
			{
				r = mid-1;
			}
		}
//		cout<<bfs(4);
		
		if(ans == INT_MAX)
		{
			cout<<-1<<'\n';
		}
		else
		{
			cout<<ans<<'\n';
		}
	}
	return 0;
}

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

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

相关文章

云图极速版限时免费活动

产品介绍 云图极速版是针对拥有攻击面管理需求的用户打造的 SaaS 应用&#xff0c;致力于协助用户发现并管理互联网资产攻击面。 实战数据 (2023.11.6 - 2024.2.23) 云图极速版上线 3 个月以来&#xff0c;接入用户 3,563 家&#xff0c;扫描主体 19,961 个&#xff0c;累计发…

Atcoder ABC341 A-D题解

比赛链接:ABC341 Problem A: 先签个到。 #include <bits/stdc.h> using namespace std; int main() {int n;cin>>n;for(int i0;i<n;i)cout<<"10"<<endl;cout<<"1"<<endl;return 0; } Problem B: 继续签。 #i…

3D模型可视化引擎HOOPS Visualize V2024版全新发布:增强了大量点云数据集的处理,与HOOPS系列产品集合实现照片级渲染!

HOOPS Visualize是一款工业级3D渲染引擎&#xff0c;可以用于打造移动端和PC端工程应用程序&#xff0c;其灵活、分层的场景管理引擎&#xff0c;支持处理各种3D模型实体&#xff0c;其高性能图形和交互处理算法&#xff0c;支持大型模型可视化&#xff0c;现已帮助达索 SOLIDW…

这两招,让你轻松俘获客户心

面向政府的数字化解决方案作为睿鸿数字应用的一个分支&#xff0c;在充分借鉴政府项目中积累的丰富经验的基础上&#xff0c;积极开发更多领域通用的标准化产品。 2023年&#xff0c;睿鸿推出了一系列创新的数字应用产品&#xff0c;包括动态表单系统、统一集成门户、统一通信中…

你听说过柔性数组吗?

目录 1. 柔性数组的概念 2. 柔性数组的特点 3. 柔性数组的使用 4. 柔性数组的优势 5.完结散花 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有帮助的话&#…

动态SLAM:基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法)

基于ORB-SLAM2与YOLOv8剔除动态特征点(三种方法) 写上篇文章时测试过程比较乱&#xff0c;写的时候有些地方有点失误&#xff0c;所以重新写了这篇 本文内容均在RGB-D环境下进行程序测试 本文涉及到的动态特征点剔除速度均是以https://cvg.cit.tum.de/data/datasets/rgbd-dat…

RF 框架实现企业级 UI 自动化测试

RobotFramework 框架可以作为公司要做自动化 但是又不会代码的一种临时和紧急情况的替代方案&#xff0c;上手简单。 前言 现在大家去找工作&#xff0c;反馈回来的基本上自动化测试都是刚需&#xff01;没有自动化测试技能&#xff0c;纯手工测试基本没有什么市场。 但是很多…

【动态规划】【回文】【字符串】1147. 段式回文

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 本文涉及知识点 动态规划汇总 LeetCode1147段式回文 你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2&#xff0c;…&#xff0c; subtextk) &#xff0c;要求满足: subtext…

如何将QQ音乐的歌单导出到excel

一、提前准备 1.选择你需要导出的音乐歌单 2.得到你的歌单ID 1、首先打开QQ音乐&#xff0c;找到想要查看的歌单&#xff0c;点击歌单右上角的更多按钮。 2、其次在弹出的菜单中选择分享&#xff0c;在分享页面中&#xff0c;选择歌单分享。 3、最后在分享页面中&#xff0c…

kafka和ZK的关系

zk相当于是kafka的一个基础设施 Kafka是一种高吞吐量、可扩展的分布式发布订阅消息系统&#xff0c;ZooKeeper是一个分布式协调服务&#xff0c;用于管理和协调分布式系统中的各种资源 Zookeeper&#xff1a;管理broker&#xff0c;consumer 创建broker后&#xff0c;向zk注册…

Leetcoder Day18| 二叉树 part07

语言&#xff1a;Java/Go 今天做了一个小决定&#xff0c;如果时间不够的话&#xff0c;可以先看go去找实习&#xff0c;所以现在加上用go去刷题 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。…

Stable Diffusion 绘画入门教程(webui)-ControlNet(深度Depth)

上篇文章介绍了线稿约束&#xff0c;这篇文章介绍下深度Depth 文章目录 一、选大模型二、写提示词三、基础参数设置四、启用ControlNet 顾名思义&#xff0c;就是把原图预处理为深度图&#xff0c;而深度图可以区分出图像中各元素的远近关系&#xff0c;那么啥事深度图&#xf…

rust下载文件

背景 最近晚上给娃听故事 这页面不能连续播放,想着下载下来用默认播放器播放好了, 刚好最近在学rust,就用rust实现mp4下载. 动手 整理下载链接 由于链接可能涉及不必要的纠纷就先不明文列出来了 编码 解析json use serde::{Deserialize,Serialize}; use serde_json;#[der…

re-迷宫题学习

re中的迷宫问题有以下特点: 在内存中布置一张 "地图"将用户输入限制在少数几个字符范围内.一般只有一个迷宫入口和一个迷宫出口 布置的地图可以由可显字符 (比如#和*)组合而成 (这非常明显, 查看字符串基本就知道这是个迷宫题了.), 也可以单纯用不可显的十六进制值进…

冷链物流温度监测解决方案,确保从生产端到患者端的制药供应链合规性和产品稳定性

全球制药、医疗保健、生命科学和生物制品物流市场 先进疗法&#xff08;细胞和基因&#xff09;和生物制剂的生产线非常庞大。由于高度个性化&#xff0c;这些医疗方法大多需要高质量的超低温储存和运输。这些疗法的冷冻或运输过程中的任何一个失误都可能关乎到患者的生命安全。…

Milvus向量库安装部署

GitHub - milvus-io/milvus-sdk-java: Java SDK for Milvus. 1、安装Standstone 版本 参考&#xff1a;Linux之milvus向量数据库安装_milvus安装-CSDN博客 参考&#xff1a;Install Milvus Standalone with Docker Milvus documentation 一、安装步骤 1、安装docker docke…

【开源】SpringBoot框架开发婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

六、回归与聚类算法 - 岭回归

目录 1、带有L2正则化的线性回归 - 岭回归 1.1 API 2、正则化程度的变化对结果的影响 3、波士顿房价预测 线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、带有L2正则化的线性回归 - 岭回…

day53 String

创建String 对象 String s "abc"; String s new String(); String的常用方法 长度方法 length(); 比较方法 equals() equalsIgnoreCase() 忽略大小写比较 compareTo() compareToIgnoreCase() 比较是否相等 基本类型比较数值是否相等 引用类型比较两个引用是…

【MATLAB源码-第144期】基于matlab的蝴蝶优化算法(BOA)无人机三维路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 ​蝴蝶优化算法&#xff08;Butterfly Optimization Algorithm, BOA&#xff09;是基于蝴蝶觅食行为的一种新颖的群体智能算法。它通过模拟蝴蝶个体在寻找食物过程中的嗅觉导向行为以及随机飞行行为&#xff0c;来探索解空间…