USACO13OPEN 重力異常

2022-05-12 12:36:55 字數 1983 閱讀 9161

船長正在拯救她的船員,beefalo 博士。

和所有偉大的冒險故事一樣,這個故事也是發生在乙個2d平面上的。囧

這個平面是m*n的格仔組成的網格,代表著船長的世界的乙個側檢視。

有些格仔是空的,另一些則是實心的,並且不能直接通過。

很不幸的是,船長跳不起來。她必須遵守這個世界的特殊物理法則。

1)如果船長的正下方沒有方塊(換句話說,即使她正在網格的邊緣),那麼她就會掉入宇宙中,同時意味著冒險失敗。

2)如果船長的正下方的方塊是空的,那麼她就會掉到這個方塊,

3)在不滿足1)與2)的情況下,船長可以做一下的事情:

a) 如果左邊(或右邊)的方格是空的,那麼她可以走到那個格仔。

b船長可以翻轉重力的方向

當船長改變翻轉重力的方向時,我們就改變船長」下方「的定義。

」下方「的定義只能是兩種

(a)比船長位置所在的方格的列編號更大的格仔,

(b)比船長位置所在的方格的列編號更小的格仔,

一開始的時候,「下方」的定義是比船長位置所在方格的列編號更大的格仔。

beefalo博士正迷失在這個世界中的某一處,請幫助船長從起點到達博士的地方。

如果可以到達,請輸出最少需要的翻轉重力的次數。

如果不可以到達,請輸出-1

第1行輸入兩個整數 n,m

第2行到n+1行中,第i+1行則是代表船長世界的第i行。每行有m個字元。

其中","代表著乙個空的格仔,"#"代表著乙個實心的格仔,"c"代表著船長的位置,"d"代表著博士的位置。

一行,輸出乙個整數。

如果船長可以到達,請輸出最少需要的翻轉重力的次數。

如果不可以到達,請輸出-1

5 5 ##### #...# #...d #c... ##.##

3輸出解釋

首先,船長在(4,2),接著她翻轉重力,到達(2,2)

接著她向右走走到(2,4),接著她第二次翻轉重力,到達(4,4)

然後她繼續向右走到(4,5),最後在翻轉一次重力,到達博士所在的(3,5)

搜尋,因為資料較大,用優先佇列優化。

重點是「掉落」操作,但也不難,注意細節,到達終點直接輸出。

1 #include 2 #include 3 #include 4 #include 5 #include6

using

namespace

std;

7struct

messi815

} c;

16 priority_queueq;

17int xs,ys,xe,ye,n,m,f[1001][1001],vis[1001][1001][2

];18

void g(int x,int

y)19

);26}27

else

28);32}

33if (y==ye)

3440}41

}42intmain()

43 57

if (ch=='d'

)58

62if (ch=='.'

)63 f[i][j]=1;64

}65 c.b=0

;66 c.s=0;67

g(xs,ys);

68while (q.empty()==0)69

78if (c.y-1>=1&&f[c.x][c.y-1

])79 g(c.x,c.y-1

);80

if (c.y+1

<=m&&f[c.x][c.y+1

])81 g(c.x,c.y+1

);82 c.b=(c.b==0

);83 c.s+=1;84

g(c.x,c.y);85}

86 cout<<-1

;87 }

USACO2010open 時間旅行

題目描述 簡化版 對乙個數列可以如下維護 a k 加入數字k。s 刪除最近一次加入的數 保證數列中一定有數 t k 回到第k個操作之前的狀態。對每次操作輸出數列的最後乙個數,假如當前數列沒有數字,輸出 1。思路 依題意模擬。設a i 表示第i次操作時數列的最後乙個數,bef i 表示第i次操作之前一...

Usaco 2011 Open 修剪草坪

傳送門 題目描述 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 n 1 n 100 000 n 1 n 100,000 n 1 n ...

USACO2002 Open 雄偉的山巒

奶牛們在落基山下避暑,從它們的房子向外望去,可以看到n 座山峰構成的山巒,奶牛發現每座山峰都是等腰三角形,底邊長度恰好是高度的兩倍。所以山峰的頂點座標可由兩個底部端點求出。設i 座第山峰的兩個底部端點的橫座標分別為ai 和bi。你能否計算一下這片山巒所覆蓋 的總面積是多少。為了保證答案是整數,輸出總...