題解: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.pswp.cn/diannao/76842.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76842.shtml
英文地址,請注明出處:http://en.pswp.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<>(); // …