牛客網 鄧老師 每日一題 小A與小B 搜尋

2021-10-07 10:57:44 字數 1689 閱讀 8230

題目描述

小a與小b這次兩個人都被困在了迷宮裡面的兩個不同的位置,而他們希望能夠迅速找到對方,然後再考慮如何逃離迷宮的事情。小a每次可以移動乙個位置,而小b每次可以移動兩次位置,小a移動的方向是上下左右左上左下右上右下8個方向,小b移動的方向是上下左右4個方向,請問他們最早什麼時候能夠找到對方,如果他們最終無法相遇,那麼就輸出」no"。

輸入描述:

第一行兩個整數n,m分別表示迷宮的行和列。\

接下來乙個n\times m 的矩陣\其中"c"表示小a的位置,"d"表示小b的的位置,\

"#「表示不可通過的障礙,」."則是可以正常通過的位置。\字元用空格隔開\第一行兩個整數n,m分別表示迷宮的行和列。

接下來乙個n×m的矩陣

其中"c"表示小a的位置,"d"表示小b的的位置,

"#「表示不可通過的障礙,」."則是可以正常通過的位置。

字元用空格隔開

輸出描述:

如果可以相遇,第一行輸出乙個yes,第二行乙個整數輸出最短的相遇時間。

否則就輸出乙個no表示不能相遇。

示例1

輸入

複製4 5

. . . . .

. # # # .

. . . # d

. . c # .

輸出

yes3

題目很明顯是一道搜尋問題。但是與往常的搜尋問題不同的事。通常我們在使用bfs做搜尋問題的時候,只在起點一端可以移動。但是這裡需要我們同時對ab兩端進行操作。可以當做兩起點的bfs。我們假設對a移動為bfs1,對b移動為bfs2。那麼,每一步,我們需要進行bfs1,bfs2,bfs2操作。對於兩種不同的bfs操作,可以設定vis1,vis2分別進行記錄,一方面是為了該端的搜尋,另一方面當我們對bfs1操作後,如果vis2和vis1同時被記錄那麼我們得到ab兩端相遇,即可直接輸出答案。如果走完n*m次仍然無法相遇,則永遠無法相遇。

#include

#define pii pair

#define line inline

#define reverse(s) reverse(s.begin(), s.end());

using

namespace std;

const

int _max =

1000+50

;int n,m,step;

int dx=

;int dy=

;bool vis[2]

[_max]

[_max]

;char mp[_max]

[_max]

;bool f =

false

;queue q[2]

;void

bfs(

bool k));

if(vis[

!k][x]

[y])}}

}void

solve()

step =0;

while

(step <= n*m)

cout<<

"no"

<}int

main()

數碼 牛客每日一題

題意 給定兩個整數 l 和 r 對於所有滿足 1 l x r 10 9 的 x 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求1 9每個數碼出現的次數。思路 可以轉化為1到 r 的問題,列舉約數 a,找到有多少約數 b,使得 a b 在1 到 r 的範圍內。統計數量。a...

牛客每日一題 保護花

題目連線 這個很明顯是貪心,推導一下公式 假設這一群牛中有a b這兩頭,他們的值分別是ati adi,bti bdi,並且已經知道了總的di值sdi 假設先運a牛就是比先運b牛好,說明先運a牛總的損壞低 則有 sdi adi 2 ati sdi bdi 2 bti 可以發現當 adi 越高 ati越...

牛客網 每日一題 5月9日 過河

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋...