AtCoder AT_abc405_d ABC405D - Escape Route

前言

BFS 算法在 AtCoder 比賽中還是會考的,因為不常練習導致沒想到,不僅錯誤 TLE 了很多,還影響了心態,3 發罰時后才 AC。

思路

首先,我們把所有位置和出口的距離算出來(用 BFS),記為 d x , y d_{x,y} dx,y?,順便求出離它最近的出口坐標,記為 ( X x , y , Y x , y ) (X_{x,y},Y_{x,y}) (Xx,y?,Yx,y?)。我們發現這個需要在隊列里記下這個點的最近出口位置以及具體坐標。

然后我們像漣漪一樣擴散著用 BFS 去求方向。找每個位置的上一步,然后判斷是否是一條路上的(即最近出口相同且距離大于這個點的距離),如果是,那么修改方向并壓入隊列,否則忽略。

似乎很成功地做完了,那么有哪些易錯點呢?

  • 更新方向的時候一定要注意距離是否大于當前點的距離。注意:必須是嚴格大于,等于也不可以,因為加上這一步之后就不是最優。
  • 記得把安全疏散出口的最近出口位置設為它自己。
  • 一定要用 BFS,而不是 DFS,兩個函數都得用 BFS。

代碼

AC 提交記錄:Submission #65683293。

TLE 提交記錄:第一發、第二發、第三發。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;int h, w, d[1010][1010];
char a[1010][1010];
pair<int, int> p[1010][1010];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
char cc[] = {'v', '^', '>', '<'};void work()
{queue<pair<pair<int, int>, pair<int, int> > > q;for (int x = 1; x <= h; x++)for (int y = 1; y <= w; y++)if (a[x][y] == 'E'){p[x][y] = make_pair(x, y);q.push(make_pair(make_pair(x, y), make_pair(x, y)));d[x][y] = 0;}while (q.size()){int fx = q.front().first.first;int fy = q.front().first.second;int xx = q.front().second.first;int yy = q.front().second.second;q.pop();for (int i = 0; i < 4; i++){int nx = fx + dx[i];int ny = fy + dy[i];if (nx < 1 || nx > h)continue;if (ny < 1 || ny > w)continue;if (a[nx][ny] != '.')continue;if (d[nx][ny] > d[fx][fy] + 1){d[nx][ny] = d[fx][fy] + 1;p[nx][ny] = make_pair(xx, yy);q.push(make_pair(make_pair(nx, ny), make_pair(xx, yy)));}}}
}void calc()
{queue<pair<int, int> > q;for (int x = 1; x <= h; x++)for (int y = 1; y <= w; y++)if (a[x][y] == 'E')q.push(make_pair(x, y));while (q.size()){int fx = q.front().first;int fy = q.front().second;q.pop();for (int i = 0; i < 4; i++){int nx = fx + dx[i];int ny = fy + dy[i];if (nx < 1 || nx > h)continue;if (ny < 1 || ny > w)continue;if (a[nx][ny] != '.')continue;if (p[nx][ny] != p[fx][fy])continue;if (d[nx][ny] <= d[fx][fy])continue;a[nx][ny] = cc[i];q.push(make_pair(nx, ny));}}
}int main()
{cin >> h >> w;for (int i = 1; i <= h; i++)for (int j = 1; j <= w; j++)cin >> a[i][j];memset(d, 0x3f, sizeof(d));work();calc();for (int i = 1; i <= h; i++){for (int j = 1; j <= w; j++)cout << a[i][j];cout << endl;}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80335.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80335.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【計算機視覺】目標檢測:yoloV1~yoloV11項目論文及對比

以下是 YOLO (You Only Look Once) 系列模型從 V1 到 V11 的詳細介紹和項目地址&#xff08;截至2024年7月&#xff09;。YOLO 是目標檢測領域的里程碑模型&#xff0c;以其 實時性 和 高精度 著稱&#xff0c;廣泛應用于自動駕駛、安防監控、工業檢測等領域。 YOLOv1 (2016) …

推薦系統架構設計

1.分析用戶行為數據?&#xff1a;? 收集用戶的活躍時間、點擊行為、瀏覽歷史等數據。?分析用戶的活躍模式&#xff0c;確定用戶最活躍的時間段。?kafka flink 數據庫 分析用戶行為并存儲 2. 預生成推薦內容?&#xff1a;? 在用戶活躍時間之前&#xff0c;預先生成推薦…

BERT類模型

1. BERT類模型是否需要處理 [CLS] 或池化&#xff1f; 那首先搞懂 [CLS] 和池化 &#xff08;1&#xff09;[CLS] 的作用 BERT 的輸入格式中&#xff0c;每個序列的開頭會添加一個特殊的 [CLS] Token&#xff08;Classification Token&#xff09;。它的設計初衷是為分類任務…

我的世界云端服務器具體是指什么?

我的世界云端服務器是指一種基于互聯網的多人游戲服務器&#xff0c;將游戲服務器運行在云平臺上&#xff0c;而不是在本地計算機中&#xff0c;這使用戶不需要考慮自身電腦的性能和網絡穩定性&#xff0c;只需要通過網絡連接到云端服務器&#xff0c;就可以享受到順暢的游戲體…

軟考(信息系統運行管理員)

第一章 信息系統運維概述 1.1 信息系統概述 信息的含義和類型 信息的含義&#xff1a; 一般&#xff1a;人們關心的事情的消息或知識。香農&#xff08;信息論創始人&#xff09;&#xff1a;用來減少隨機不確定性的東西&#xff08;標志著信息科學進入定量研究階段&#xff…

Unity基礎學習(九)輸入系統全解析:鼠標、鍵盤與軸控制

目錄 一、Input類 1. 鼠標輸入 2. 鍵盤輸入 3. 默認軸輸入 &#xff08;1&#xff09; 基礎參數 &#xff08;2&#xff09;按鍵綁定參數 &#xff08;3&#xff09;輸入響應參數 &#xff08;4&#xff09;輸入類型與設備參數 &#xff08;5&#xff09;不同類型軸的參…

VBA將PDF文檔內容逐行寫入Excel

VBA是無法直接讀取PDF文檔的&#xff0c;但結合上期我給大家介紹了PDF轉換工具xpdf-tools-4.05&#xff0c;先利用它將PDF文檔轉換為TXT文檔&#xff0c;然后再將TXT的內容寫入Excel&#xff0c;這樣就間接實現了將PDF文檔的內容導入Excel的操作。下面的代碼將向大家演示如何實…

Spring Boot之MCP Client開發全介紹

Spring AI MCP(模型上下文協議,Model Context Protocol)客戶端啟動器為 Spring Boot 應用程序中的 MCP 客戶端功能提供了自動配置支持。它支持同步和異步兩種客戶端實現方式,并提供了多種傳輸選項。 MCP 客戶端啟動器提供以下功能: 多客戶端實例管理 支持管理多個客戶端實…

[題解]2023CCPC黑龍江省賽 - Folder

來源&#xff1a;F.Folder - Codeforces題意&#xff1a;給定由 n ( 1 ≤ n ≤ 1 0 5 ) n(1\le n\le 10^5) n(1≤n≤105)個結點組成的樹&#xff0c;每次操作可將一棵子樹接到其他結點上。求將樹轉換為一棵斜樹的最小操作次數。關鍵詞&#xff1a;思維(簽到)題解&#xff1a;斜…

string[字符串中第一個的唯一字符][藍橋杯]

使用哈希表解決 class Solution { public:int firstUniqChar(string s) {int arr[26];for(int i0;i<s.size();i){arr[s[i]-a];}for(int i0;i<s.size();i){if(arr[s[i]-a]1)return i;}return -1;} };

【深度學習-Day 8】讓數據說話:Python 可視化雙雄 Matplotlib 與 Seaborn 教程

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

Flink 實時數據一致性與 Exactly-Once 語義保障實戰

在構建企業級實時數倉的過程中,“數據一致性” 是保障指標準確性的核心能力,尤其是在金融、電商、醫療等對數據敏感度極高的場景中。Flink 作為流批一體的實時計算引擎,其內建的 Exactly-Once 語義為我們提供了強有力的保障機制。本篇將圍繞如何實現端到端的數據一致性、如何…

傅利葉十周年,升級核心戰略:“有溫度”的具身智能藍圖

5月9日&#xff0c;傅利葉十周年慶典暨首屆具身智能生態峰會在上海正式召開。本次大會以“十年共創&#xff0c;具身成翼”為主題&#xff0c;匯聚了來自通用機器人與醫療康復領域的頂尖專家學者、合作伙伴與投資機構&#xff0c;共同探索具身智能在未來十年的技術應用與生態發…

Docker中mysql鏡像保存與導入

一、Docker中mysql鏡像保存 Docker 的 MySQL 鏡像保存通常有兩種場景&#xff1a;一種是保存鏡像本身的修改&#xff08;如配置、初始化數據&#xff09;&#xff0c;另一種是持久化保存容器運行時產生的數據&#xff08;如數據庫表、用戶數據&#xff09;。以下是具體方法&am…

大模型微調指南之 LLaMA-Factory 篇:一鍵啟動LLaMA系列模型高效微調

文章目錄 一、簡介二、如何安裝2.1 安裝2.2 校驗 三、開始使用3.1 可視化界面3.2 使用命令行3.2.1 模型微調訓練3.2.2 模型合并3.2.3 模型推理3.2.4 模型評估 四、高級功能4.1 分布訓練4.2 DeepSpeed4.2.1 單機多卡4.2.2 多機多卡 五、日志分析 一、簡介 LLaMA-Factory 是一個…

記錄一次window2012r2安裝配置oracle11g的過程-出現的錯誤以及解決方法

Windows server 2012R2安裝Oracle11g 出現的錯誤 同事反饋正常安裝oracle后&#xff0c; 使用命令行 sqlplus sys / as sysdba出現“ORA-12560:TNS:協議適配器錯誤”。 去services.msc服務狀態里面 OracleOraDb11g_home1TNSListener服務停止狀態&#xff0c;而且無法啟動。 …

2003-2020年高鐵線路信息數據

2003-2020年高鐵線路信息數據 1、時間&#xff1a;2003-2020年 2、來源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指標&#xff1a;高鐵線路名稱、起點名、終點名、開通時間、線路長度(km)、設計速度(km/h&#xff09;、沿途主要車站 …

【論文閱讀】FreePCA

FreePCA: Integrating Consistency Information across Long-short Frames in Training-free Long Video Generation via Principal Component Analysis 原文摘要 問題背景 核心挑戰&#xff1a; 長視頻生成通常依賴在短視頻上訓練的模型&#xff0c;但由于視頻幀數增加會導致數…

Linux:線程同步與互斥

目錄 線程互斥 鎖 初始化 銷毀 加鎖 解鎖 線程同步 條件變量 初始化 銷毀 等待條件滿足 喚醒等待 pthread_cond_signal pthread_cond_broadcast 生產者消費者模型 3種關系 2種角色 1個交易場所 POSIX信號量 初始化 銷毀 等待 發布 線程互斥 互斥相關…

LeetCode --- 448 周賽

題目列表 3536. 兩個數字的最大乘積 3537. 填充特殊網格 3538. 合并得到最小旅行時間 3539. 魔法序列的數組乘積之和 一、兩個數字的最大乘積 由于數據都是正數&#xff0c;所以乘積最大的兩個數&#xff0c;本質就是找數組中最大的兩個數即可&#xff0c;可以排序后直接找到…