首页 > 其他分享 >睿爸334

睿爸334

时间:2024-08-21 22:38:19浏览次数:9  
标签:tx ty int 334 vis 路标 510

题目传送门

说明

“哞林匹克”运动会中的一大亮点就是滑雪比赛。滑雪比赛的场地是一个 \(n \times m\) 的矩阵(\(1<=n,m<=500\)),每一个点有对应的海拔(海拔均在 \(0\) 到 \(10^9\) 的范围内)。

主板方指定了若干个点作为路标。同时,主办方还要规定一个比赛系数 \(d\) ,这个系数规定选手不能在海拔高度差大于 \(d\) 的两个点之间活动。在规则允许的范围内,选手可以向东南西北任意一个点活动,选手的任务是在尽量短的时间内到达所有的路标打卡。

为了确保每一个选手的安全,主办方想将系数d设置得越小越好,然而这个系数要确保每一个路标是相互联通的(否则比赛就失去了意义)。

输入格式

第一行输入两个整数n和m,表示比赛场地的大小;

接下来输入两个 \(n \times m\) 的矩阵,第一个表示每一个点的海拔高度,第二个矩阵表示路标的设置情况,其中数字 \(1\) 表示该点为路标,数字 \(0\) 表示不是路标。

输出格式

输出 \(d\)。

样例

输入数据 \(1\)

3 5
20 21 18 99 5
19 22 20 16 26
18 17 40 60 80
1 0 0 0 1
0 0 0 0 0
0 0 0 0 1

输出数据 \(1\)

21

-------------------------------------------------------

分析

本题每次枚举 \(d\)。每次 BFS 遍历一遍地图,如果发现一个点到另一个点距离大于 \(d\) 的话,则不走这条路。否则把这个新的点加入队列。

不过本题的 \(d\) 高达 \(10^9\),所以暴力枚举肯定是不行的,因此,我们就要用上二分答案来解决这道题了。

代码

#include <bits/stdc++.h>
#define int long long //开个long long,以防万一 
using namespace std;

int n, m, l = 0, r = 1e9, ans = INT_MAX, map1[510][510], map2[510][510]; //map1表示地图,map2表示打卡点 
int dx[4] = {0, 1, 0, -1}; //方位数组 
int dy[4] = {1, 0, -1, 0};
bool vis[510][510];
struct node {
	int x, y; //记录一个坐标 
};

bool check(int d) {
	memset(vis, 0, sizeof(vis)); //更新数组 
	vis[1][1] = 1; //起点设为1 
	queue<node>q;
	q.push({1, 1}); //把起点放进去 
	while(!q.empty()) {
		int x = q.front().x; //取出队头元素 
		int y = q.front().y;
		q.pop();
		for (int i = 0; i < 4; i++) {
			int tx = x + dx[i], ty = y + dy[i]; //新的一个坐标 
			if(tx < 1 || tx > n || ty < 1 || ty > m || vis[tx][ty] || abs(map1[x][y] - map1[tx][ty]) > d) continue; //判断是否可以到达新的点 
			q.push({tx, ty}); //放入队列 
			vis[tx][ty] = 1; //进行记录 
		}
	}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			if(map2[i][j] && !vis[i][j]) //如果这个点是打卡点并且还没有走到 
				return 0; //则返回0 
	return 1; //否则返回1 
}

signed main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			cin >> map1[i][j];
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++)
			cin >> map2[i][j];
	while(l <= r) {
		int mid = (l + r) / 2;
		if(check(mid)) ans = min(mid, ans), r = mid - 1; //如果可以,记录答案,并且看看能否找到更小的 
		else l = mid + 1; //否则找更大的 
	}
	cout << ans << endl;
	return 0;
}

标签:tx,ty,int,334,vis,路标,510
From: https://www.cnblogs.com/chrispang/p/18372702

相关文章

  • HDU 4334 Trouble
    题目链接:HDU4334【Trouble】思路    哈希+贪心,直接将五个数组分成两个或者三个数组,此时数组相加的时间复杂度为O(n2)或者O(n3),然后双重循环数组e和s1并遍历找出s2中是否有满足题意的元素,这个步骤可以使用二分代替还能降低时间复杂度。代码#include<iostream>#inc......
  • Leetcode 1334 Find the City With the Smallest Number of Neighbors at a Threshold
    Problem:FindtheCityWiththeSmallestNumberofNeighborsataThresholdDistanceTheknowledgepointsoutsideofmyskilltreeExplanationofCodeandConceptsWhatisfloat('inf')?float('inf')inPythonrepresentspositiveinfin......
  • 334 Login UI
    步骤1、login-user.ts运行如下命令ng g class models\LoginUser生成的login-user.ts更新后显示如下exportclassLoginUser{email:string|null=null;password:string|null=null;}2、account.service.tsimport{HttpClient,HttpHeaders}from'......
  • 【例1334】get default part units 获取默认零件单位
    文章作者:里海来源网站:NX二次开发官方案例专栏简介《getdefaultpartunits获取默认零件单位》这是一个NX二次开发官方小例子,下面是代码和解析。相较于混乱、未经验证的代码,官方案例能够确保开发者获得准确的开发方法,这些官方示例代码经过严格测试,能够正确地反映出NX......
  • P3349 [ZJOI2016] 小星星
    P3349[ZJOI2016]小星星树形dp+子集反演有一张图和一棵树,点数都为\(n\),给树上的每个点一个映射\(a_i\),每个\(a_i\)不同,\(a_i\in[1,n]\)。要求对于树上所有\((u,v)\),都有\((a_u,a_v)\)在图上。求映射方案数。看到\(n\)的范围,可以想到树形状压dp。设\(F_{i,j,S}\)......
  • P3345 [ZJOI2015] 幻想乡战略游戏
    题意:傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和别人打仗了。在打仗之前,幽香现在面临一个非常基本的管理问题需要解决。整个地图是一......
  • COMP3334 端到端加密聊天web应用程序
    端到端加密聊天web应用程序2023/2024年第2学期如今,web服务是最重要的用户的常见应用程序形式暴露于。Web浏览器成为计算机上的流行应用程序使用户能够访问这些web服务。确保web服务的安全是对互联网至关重要。此外,隐私的一个重要特征现代。您的工作是实现端到端加密聊天web应用程......
  • 334
    fromUtils.optionimport*fromdataimporttest_dataloaderfromUtils.utilsimport*fromUtils.metricsimport*#fromUtils.metricsimportssimasssimfromtorchvisionimportutilsasvutilsfrommodels.networkimportNetworkasNetimportlpipsfrom......
  • COMP3334项目端到端加密聊天
    OMP3334项目端到端加密聊天web应用程序2023/2024年第2学期如今,web服务是最重要的用户的常见应用程序形式暴露于。Web浏览器成为计算机上的流行应用程序使用户能够访问这些web服务。确保web服务的安全是对互联网至关重要。此外,隐私的一个重要特征现代。您的工作是实现端到端加密聊......
  • P3344 [ZJOI2015] 幻想乡 Wi-Fi 搭建计划
    非常精妙的一个做法。简化题意:定义合法区域为\(y\in[0,R]\)的区域,给定一些在合法区域内的标记点,与一些圆心在合法区域外的,半径为\(R\)的圆,选择第\(i\)个圆会产生\(c_i\)的代价。第一问是最多能覆盖几个标记点;第二问是在保证覆盖标记点最多的情况下,代价的最小值。首先......