题解:AT_abc241_f [ABC241F] Skate

一道经典的 bfs 题。

提醒:本题解是为小白专做的,不想看的大佬请离开。

这道题首先一看就知道是 bfs,但是数据点不让我们过: 1 ≤ H , W ≤ 1 0 9 1\le H,W\le10^9 1H,W109

那么我们就需要优化了,从哪儿下手呢?看数据点第三行: 1 ≤ N ≤ 1 0 5 1\le N\le10^5 1N105

图很大,但是石头不多,那么我们就可以从石头下手。这里需要我们把思维方式转换过来一下。

正常的 bfs 是去找路,那我们就找石头!那石头在哪儿呢?

首先,我们不可能在 bfs 的时候把所有的石头全扫一遍然后找,这样很明显会 TLE。而我们再回忆一下 bfs 的过程:上下左右全走一遍,然后……

对啊!bfs 只扫这个点的这一行、这一列,我们为什么不能把每一行、每一列的石头所在的列数、行数保存下来呢?但还是有个问题:如果我要跑一行的数据,很有可能会被数据点卡,怎么再优化呢?这就要请出查询时间复杂度最低的算法了:二分!

总时间复杂度:最差情况下 O ( n log ⁡ 2 ( n ) ) O(n\log_2(n)) O(nlog2(n))

代码实现:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,t,x,y,stx,sty,edx,edy;
map<pair<int,int>,int>dis;
map<int,set<int>>h,l;
queue<pair<int,int>>q;
void add(int u,int v,int now) {if(dis.find(make_pair(u,v))==dis.end()) {dis[make_pair(u,v)]=now;q.push(make_pair(u,v));}
}
signed main() {cin>>n>>m>>t>>stx>>sty>>edx>>edy;while(t--) {cin>>x>>y;h[x].insert(y);//保存行和列l[y].insert(x);}dis[make_pair(stx,sty)]=0;q.push(make_pair(stx,sty));while(!q.empty()) {pair<int,int>p=q.front();q.pop();int u=p.first,v=p.second;int now=dis[make_pair(u,v)];if(u==edx&&v==edy) {cout<<now;return 0;}auto it=h[u].lower_bound(v);//二分if(it!=h[u].end()) {add(u,(*it)-1,now+1);//这里我试过把函数中的部分放下来,但就是不知道为什么会错}if(it!=h[u].begin()) {add(u,(*(--it))+1,now+1);}it=l[v].lower_bound(u);if(it!=l[v].end()) {add((*it)-1,v,now+1);}if(it!=l[v].begin()) {add((*(--it))+1,v,now+1);}}cout<<"-1";return 0;
}

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

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

相关文章

【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统

项目介绍 本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该…

STM32定时器通道1-4(CH1-CH4)的引脚映射关系

以下是 STM32定时器通道1-4(CH1-CH4)的引脚映射关系的详细说明,以常见型号为例。由于不同系列/型号差异较大,请务必结合具体芯片的参考手册确认。 一、STM32F1系列(如STM32F103C8T6) 1. TIM1(高级定时器) 通道默认引脚重映射引脚(部分/完全)备注CH1PA8无互补输出CH1…

bge-m3+deepseek-v2-16b+离线语音能力实现离线文档向量化问答语音版

ollama run deepseek-v2:16b ollama pull bge-m3 1、离线听写效果的大幅度提升。50M 1.3G&#xff08;每次初始化都会很慢&#xff09;---优化到首次初始化使用0延迟响应。 2、文档问答历史问题处理与优化&#xff0c;文档问答离线策略讨论与参数暴露。 3、离线大模型答复中断…

前端界面在线excel编辑器 。node编写post接口获取文件流,使用传参替换表格内容展示、前后端一把梭。

首先luckysheet插件是支持在线替换excel内容编辑得但是浏览器无法调用本地文件&#xff0c;如果只是展示&#xff0c;让后端返回文件得二进制文件流就可以了&#xff0c;直接使用luckysheet展示。 这里我们使用xlsx-populate得node简单应用来调用本地文件&#xff0c;自己写一个…

JavaScript学习20-Event事件对象

1.属性 即点击谁就打印出来谁 2.方法 未添加stopPropagatio方法&#xff1a; 添加stopPropagatio方法后&#xff1a;

FreeRTOS 启动过程中 SVC 和 PendSV 的工作流程​

在 FreeRTOS 的启动过程中,SVC(Supervisor Call) 和 PendSV(Pendable Service Call) 是两个关键的系统异常,分别用于 首次任务启动 和 任务上下文切换。它们的协作确保了从内核初始化到多任务调度的平滑过渡。以下是详细的工作流程分析(以 ARM Cortex-M 为例): 1. SVC…

[自制调试工具]构建高效调试利器:Debugger 类详解

一、引言 在软件开发的漫漫征程中&#xff0c;调试就像是一位忠诚的伙伴&#xff0c;时刻陪伴着开发者解决代码里的各类问题。为了能更清晰地了解程序运行时变量的状态&#xff0c;我们常常需要输出各种变量的值。而 Debugger 类就像是一个贴心的调试助手&#xff0c;它能帮我…

foobar2000 VU Meter Visualisation 插件汉化版 VU表

原英文插件点此 界面展示 下载 https://wwtn.lanzout.com/iheI22ssoybi 安装方式 解压安装文件&#xff0c;文件名为&#xff1a;foo_vis_vumeter-0.10.2_CHINIESE.fb2k-component

消息中间件对比与选型指南:Kafka、ActiveMQ、RabbitMQ与RocketMQ

目录 引言 消息中间件的定义与作用 消息中间件在分布式系统中的重要性 对比分析的四种主流消息中间件概述 消息中间件核心特性对比 消息传递模型 Kafka&#xff1a;专注于发布-订阅模型 ActiveMQ&#xff1a;支持点对点和发布-订阅两种模型 RabbitMQ&#xff1a;支持点…

liunx输入法

1安装fcitx5 sudo apt update sudo apt install fcitx fcitx-pinyin 2配置为默认输入法 设置-》系统-》区域和语言 点击系统弹出语言和支持选择键盘输入法系统 3设置设置 fcitx-configtool 如果没显示需要重启电脑 4配置fcitx 把搜狗输入法放到第一位&#xff08;点击下面…

WindowsPE文件格式入门05.PE加载器LoadPE

https://bpsend.net/thread-316-1-1.html LoadPE - pe 加载器 壳的前身 如果想访问一个程序运行起来的内存,一种方法就是跨进程读写内存,但是跨进程读写内存需要来回调用api,不如直接访问地址来得方便,那么如果我们需要直接访问地址,该怎么做呢?.需要把dll注进程,注进去的代码…

QGIS中第三方POI坐标偏移的快速校正-百度POI

1.百度POI&#xff1a; name,lng,lat,address 龙记黄焖鸡米饭(共享区店),121.908315,30.886636,南汇新城镇沪城环路699弄117号(A1区110室) 好福记黄焖鸡(御桥路店),121.571409,31.162292,沪南路2419弄26号1层B间 御品黄焖鸡米饭(安亭店),121.160322,31.305977,安亭镇新源路792号…

SQL的调优方案

一、前言 SQL调优是提升数据库性能的关键手段。需结合索引优化、SQL语句优化、执行计划分析及数据库架构设计等多方面综合处理。 二、索引优化 创建合适索引 高频查询字段&#xff1a;对WHERE、JOIN、ORDER BY涉及的字段创建索引&#xff0c;尤其是区分度高的字段&#xff08…

【项目管理】第一部分 信息技术 1/2

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 概要 知识点&#xff1a; 现代化基础设施、数字经济、工业互联网、车联网、智能制造、智慧城市、数字政府、5G、常用数据库类型、数据仓库、信息安全、网络安全态势感知、物联网、大数…

【玩泰山派】1、mac上使用串口连接泰山派

文章目录 前言picocom工具连接泰山派安装picocom工具安装ch340的驱动串口工具接线使用picocom连接泰山派 参考 前言 windows上面有xshell这个好用的工具可以使用串口连接板子&#xff0c;在mac上好像没找到太好的工具&#xff0c;只能使用命令行工具去搞了。 之前查找说mac上…

【C++奇遇记】C++中的进阶知识(继承(一))

&#x1f3ac; 博客主页&#xff1a;博主链接 &#x1f3a5; 本文由 M malloc 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;LeetCode刷题集 数据库专栏 初阶数据结构 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如…

【Scratch编程系列】Scratch编程软件界面

Scratch是一款由麻省理工学院(MIT&#xff09; 设计开发的少儿编程工具。其特点是&#xff1a;使用者可以不认识英文单词&#xff0c;也可以不使用键盘&#xff0c;就可以进行编程。构成程序的命令和参数通过积木形状的模块来实现。用鼠标拖动指令模块到脚本区就可以了。 这个软…

开篇 - 配置Unlua+VsCode的智能提示、调试以及学习方法

智能提示 为要绑定Lua的蓝图创建模板文件&#xff0c;这会在Content/Script下生成lua文件 然后点击生成智能代码提示&#xff0c;这会在Plugins/Unlua/Intermediate/生成Intenllisense文件夹 打开VSCode,点击文件->将工作区另存为。生成一个空工作区&#xff0c;放置在工程…

QEMU-KVM加SPICE,云电脑诞生了

没错&#xff01;‌QEMU-KVM SPICE‌ 的组合&#xff0c;本质上就是一套‌轻量级云电脑&#xff08;云桌面&#xff09;‌的解决方案。通过虚拟化技术将计算资源池化&#xff0c;再通过SPICE协议提供流畅的远程桌面体验&#xff0c;用户用任意设备&#xff08;笔记本/平板/瘦客…

hashtable遍历的方法有哪些

在 Java 中&#xff0c;遍历 Hashtable&#xff08;或其现代替代品 HashMap&#xff09;有多种方式&#xff0c;以下是 6 种常用方法的详细说明和代码示例&#xff1a; 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …