牛客網 Wannafly挑戰賽21 B機械人

2021-08-22 09:56:27 字數 1248 閱讀 2303

從前在月球上有乙個機械人。

月球可以看作乙個 n*m 的網格圖,每個格仔有三種可能:空地,障礙,機械人(有且僅有乙個),現在地面指揮中心想讓機械人在月球上行走,每次可以傳送乙個指令,為 u-往上走、d-往下走、l-往左走、r-往右走的其中之一。

當機械人接收到乙個行走指令時,如果即將到達的位置為障礙物,那麼機械人將留在原地,否則機械人向對應方向走一步,如果其走出邊界那麼立即死亡。

地面指揮中心當然不想讓機械人就這麼掛掉,因此其定義乙個操作序列是安全的,當且僅當機械人按此操作序列走不會死亡。

但是從地球向月球發資訊不是個容易的事,而且有時候某些指令還會在茫茫宇宙中被吞沒,比如指揮中心傳出去 rur 指令,到機械人那裡就可能變成 rr 或者變成 u,因此定義乙個操作序列是絕對安全的當且僅當其任意子序列都是安全的。

現在地面指揮中心想知道,對於某乙個地圖,絕對安全的操作序列最長可以到多少,如果存在乙個長度為正無窮的這樣的序列,那麼輸出-1。

輸入描述:

第一行乙個正整數t,表示資料組數。

接下來一共 t 組資料,每組資料第一行有兩個正整數 n,m,表示網格圖的大小, 接下來 n 行,每行 m 個字元,表示這張網格圖。

其中字元「.」表示空地,「#」表示障礙物,「s」表示機械人所在位置。

輸出描述:

一共 t 行,每行乙個整數,表示答案。

輸入

3

5 5#####

#...#

.#s#.

#...#

#####

1 7s......

5 8#.######

#.#..s.#

#.#.##.#

#......#

########

輸出

-1

6-1

資料範圍 0≤t,n,m≤50

看上下左右有沒有阻礙

最大長度就是把上下左右最大可移動長度全部加上來

#includeusing namespace std;

int main()

}} int flag=0;

for(int i=x+1;i} for(int i=0;i} for(int j=0;j} for(int j=y+1;j} if(flag)else

}}

牛客網 Wannafly挑戰賽21 A 燈塔

題目鏈結 題目描述 z市是一座港口城市,來來往往的船隻依靠燈塔指引方向。在海平面上,存在n個燈塔。每個燈塔可以照亮以它的中心點為中心的90 範圍。特別地,由於特殊限制,每個燈塔照亮範圍的角的兩條邊必須要麼與座標軸平行要麼與座標軸成45 由於經費限制,z市的燈塔只能被點亮一座。你需要求出在這種情況下,...

牛客Wannafly挑戰賽12 題解

傳送門 說是比賽題解,其實我只會前三題 後面的一定補 t1題意,在乙個長度為n的時間內,問如何選擇存款期限,使得收益最大。dp include include include include using namespace std define fi first define se second d...

牛客網wannafly挑戰賽13 D 貪心

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一行包括兩個數t,n,表示有n個蛋糕,最小的蛋糕的質量與最大的蛋糕的質量的比值不小於t 接下來n行,每行乙個數wi,表示n個蛋糕的質量輸出包括一行,為最小切割的刀...