洛谷 P2658 汽车拉力比赛

2024-04-03 01:04

本文主要是介绍洛谷 P2658 汽车拉力比赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

思路:二分+BFS

题目的大意就是找出一个难度系数,让到达每一个路标之间的相邻格子的高度之差为难度系数。

所以,想要找到这个难度系数,我们需要不断地枚举数据范围内的数据,然后一个一个试试,全部BFS遍历一遍(当然,你可以用DFS)看看能不能到达所有的路标。能的话代表这个数左边的数也可能可以,也就是比它小的数;否则,就需要找右边的数。

思路上很简单,实现起来有点难度,需要注重几个细节:

1.首先就是对于地图,我们需要有两个以上二维数组,一个用来存储地图,一个用来存储路标的地图,另一个则是需要标注我们遍历过的格子的状态(也就是走没走过这个格子)。

2.在判断是否能走的时候需要加一条条件,也就是这两个相邻格子之间是不是能达到我们现在规定的数mid;如果超过了,说明不能走。然后就是走没走过,走过了就不再走了;而后就是走的时候有没有超过地图。

3.我们需要从一个路标开始走到其他路标,所以起点不是(1,1),而是以路标中的其中一个作为起点。在我们走过了全部路标的时候,也就代表这个数是可行的,我们直接返回true。

4.别忘了每一次bfs的时候需要清楚队列,和状态数组,因为上一次遍历完之后不会自动清除,所以要注意清空。

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<cmath> 
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include <iomanip>
#include<sstream>
#include<numeric>
#include<map>
#include<limits.h>
#include<unordered_set>
#include<set>
#define int long long
#define MAX 1010
#define _for(i,a,b) for(int i=a;i<(b);i++)
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef pair<int, int> PII;
int n, m;
int count_flag;
int counts;
int a, b;
int dx[] = { -1,1,0,0 };
int dy[] = { 0,0,-1,1 };
queue<PII>q;
int maps[MAX][MAX];
int flag[MAX][MAX];
int st, ed;
int taidu[MAX][MAX];
bool bfs(int k) {q.push({ st,ed });taidu[st][ed] = 1;counts = 1;while (!q.empty()) {auto tmp = q.front();q.pop();_for(i, 0, 4) {int a = dx[i] + tmp.first;int b = dy[i] + tmp.second;if (a > n || a<1 || b>m || b < 1)continue;if (abs(maps[tmp.first][tmp.second] - maps[a][b]) > k)continue;if (taidu[a][b])continue;q.push({ a,b });taidu[a][b] = 1;if (flag[a][b] == 1) {counts++;if (counts == count_flag) {return true;}}}}return false;}
signed main() {ios::sync_with_stdio(false);cin.tie(NULL); cout.tie(NULL);cin >> n >> m;for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {cin >> maps[i][j];}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++){cin >> flag[i][j];if (flag[i][j] == 1)count_flag++;}}int ya = 0;_for(i, 1, n + 1) {_for(j, 1, m + 1) {if (flag[i][j] == 1) {st = i;ed = j;ya = 1;break;}if (ya == 1)break;}}int l = 0;int r = 1e9 + 7;while (l < r) {int mid = (l + r) / 2;q = queue<PII>();memset(taidu, false, sizeof taidu);if (bfs(mid))r = mid;elsel = mid + 1;}cout << r;return 0;
}

这篇关于洛谷 P2658 汽车拉力比赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/871526

相关文章

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

我们依旧在追梦的路上-山东省第六届ACM比赛总结

这场比赛从结果而言达到了预期(金牌),从过程而言和我的预期相差甚远(打的太乱,个人发挥很差),还好关键时刻队友抗住压力,负责后果真的不堪设想。 热身赛 热身赛纯粹测机器的,先把A,B,C草草水过(A题小写x打成大写的也是醉了),我和老高开始各种测机器,long long不出所料是lld的,试了一下除0和数组越界的re问题,发现没有re,只有wa(甚至数组越界还AC了),至于栈深的话也没过多追

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

ACM比赛中如何加速c++的输入输出?如何使cin速度与scanf速度相当?什么是最快的输入输出方法?

在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中

结合Python与GUI实现比赛预测与游戏数据分析

在现代软件开发中,用户界面设计和数据处理紧密结合,以提升用户体验和功能性。本篇博客将基于Python代码和相关数据分析进行讨论,尤其是如何通过PyQt5等图形界面库实现交互式功能。同时,我们将探讨如何通过嵌入式预测模型为用户提供赛果预测服务。 本文的主要内容包括: 基于PyQt5的图形用户界面设计。结合数据进行比赛预测。文件处理和数据分析流程。 1. PyQt5 图形用户界面设计

保研 比赛 利器: 用AI比赛助手降维打击数学建模

数学建模作为一个热门但又具有挑战性的赛道,在保研、学分加分、简历增色等方面具有独特优势。近年来,随着AI技术的发展,特别是像GPT-4模型的应用,数学建模的比赛变得不再那么“艰深”。通过利用AI比赛助手,不仅可以大大提升团队效率,还能有效提高比赛获奖几率。本文将详细介绍如何通过AI比赛助手完成数学建模比赛,并结合实例展示其强大功能。 一、AI比赛助手的引入 1. 什么是AI比赛助手? AI比

提升汽车制造质量:矫平技术在车门平整化中的应用

汽车制造业对每一个部件的精细度都有着极高的要求,尤其是车门这样的关键组件。车门不仅需要提供良好的密封性,还要在外观上展现出车辆的高端品质。然而,生产过程中的不平整问题往往成为提升制造质量的障碍。矫平技术的应用,为解决这一问题提供了有效的手段。 车门平整度的重要性 车门的平整度对于车辆的整体性能和美观至关重要。不平整的车门可能导致密封不良、噪音增大,甚至影响车门的正常开启和关闭。因此,确保车门的

Java语言的Netty框架+云快充协议1.5+充电桩系统+新能源汽车充电桩系统源码

介绍 云快充协议+云快充1.5协议+云快充1.6+云快充协议开源代码+云快充底层协议+云快充桩直连+桩直连协议+充电桩协议+云快充源码 软件架构 1、提供云快充底层桩直连协议,版本为云快充1.5,对于没有对接过充电桩系统的开发者尤为合适; 2、包含:启动充电、结束充电、充电中实时数据获取、报文解析、Netty通讯框架、包解析工具、调试器模拟器软件等; 源码合作 提供完整云快充协议源代码