船長正在拯救她的船員,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 #include6using
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。你能否計算一下這片山巒所覆蓋 的總面積是多少。為了保證答案是整數,輸出總...