Login with GitHub. Nope?
修正 C++ 的程式碼在使用一定量動態記憶體後會產生 RF 的問題 @ 2019/12/6 4:45pm NeoHOJ 強勢復活中 (Open beta)
Submit  Ranklist

Problem : 269 - Mecho

Problem Statistics

Solved Member: 10  Submission: 48  User Tried: 10

Statement:

大熊米可發現一個小寶藏 ─ 神秘蜜蜂的秘密蜂蜜罈!他開心地享用起新發現的寶藏,直到忽然間有一隻蜜蜂發現了他並且發出蜜蜂警報。他知道,從此刻起蜂巢裡的蜜蜂將傾巢而出並開始圍捕他。他得離開蜂蜜罈然後趕快回家;但是,蜂蜜實在是太美味了,所以他並不想那麼快離開。請幫忙米可決定他來得及離開蜂蜜罈的最晚時間點。

米可住的森林是由 N x N 個單位方格所形成的網格來表示,而方格的邊正好是南北向和東西向。每個單位方格可能是大樹方格、草叢方格、蜂巢方格、或米可的家。當一個方格從東邊、西邊、南邊或北邊 (不包含對角線) 緊鄰著另一個方格,我們將這兩個方格視為相鄰。米可是隻笨拙的熊,所以他的每一步必須移動到相鄰的方格。米可只能踏過草叢方格而無法跨過大樹或蜂巢方格;此外,每分鐘他最多只能移動S步。

在蜜蜂警報響起的那一刻,米可的位置是在蜂蜜罈所在的草叢方格,而蜂群則位在每一個蜂巢方格 (森林裡可能有多於一個蜂巢方格)。從這一刻開始的每一分鐘,下列的事件會依序發生:

 •假設米可正在享用蜂蜜,他要決定是否繼續享用或者離開。假如他繼續享用,這一分鐘內他都不會離開,否則,他會立刻離開並且在森林裡依照上述的方式移動至多S步。米可沒有辦法帶著蜂蜜移動,所以一旦他開始移動了,就再也吃不到蜂蜜了。

 •在米可食用蜂蜜或者移動了完整一分鐘後,蜂群會往草叢方格漫延一個單位。更精確地來說,蜂群會漫延至與他們佔據的方格相鄰的每一個草叢方格。除此之外,一旦方格被蜂群佔據,他就永遠都被佔據了。(也就是說,蜂群不是移動,而是不斷擴大佔據的範圍)

換句話說蜂群是這樣漫延的:一開始蜜蜂警報響起時,蜂群只佔據蜂巢所在的方格。在第一分鐘結束的時候,他們將佔據所有與蜂巢方格相鄰的草叢方格 (這當然也包括蜂巢方格所在的方格) 。在第二分鐘結束的時候,他們會再多佔據了所有與前述方格相鄰的草叢方格,以此類推。在足夠長的時間之後,蜂群會佔據所有他們到得了的草叢方格。

米可和蜂群都無法離開森林。還有,根據上述的規則,米可食用蜂蜜的時間一定是一個整數值。

當米可處於一個被蜜蜂佔據的方格,這代表米可被蜂群追到了。

Task:

給定森林的地圖,寫一個程式計算米可能夠留在他的初始位置食用蜂蜜的最大分鐘數,前提是他能在任何蜜蜂追到他之前回到他的家中。

Input:Output:

第一行包含整數 N 與 S,以一個空白隔開。

接下來的 N 行表示森林地圖。每一行有 N 個字元,每一個字元表示一個方格,可能的字元和他們的意義如下:
T 表示大樹方格。
G 表示草叢方格。
M 表示米可和蜂蜜罈一開始所在的方格,這個方格是個草叢方格。
D 表示米可的家,只有米可進得去,而蜂群不行。
H 表示蜂巢方格。

重要提醒:地圖上保證只有一個 M,只有一個 D。在米可一開始所在的方格到他的家之間,保證存在一連串相鄰的G;此外,至少有一個蜂巢到蜂蜜罈所在的方格 (也就是米可一開始所在的方格) 之間,保證存在一連串相鄰的G。上述方格序列的長度有可能為零,例如當米可的家或蜂巢就緊鄰著他的初始位置的時候。還有一點,蜂群沒辦法飛過米可的家,對他們來說,米可的家就像棵大樹一樣。

限制:
1 ≤ N ≤ 800,地圖大小 (邊長) 。
1 ≤ S ≤ 1000,米可每分鐘能移動的最大步數。
輸出一個整數,表示米可能夠安全返家的前提下,留在初始位置食用蜂蜜的最大分鐘數。

假如米可不可能在蜜蜂抓到他之前回到家,你必須輸出-1。

Sample Input:Sample Output:

Sample #1:
7 3
TTTTTTT
TGGGGGT
TGGGGGT
MGGGGGD
TGGGGGT
TGGGGGT
THHHHHT

Sample #2:
7 3
TTTTTTT
TGGGGGT
TGGGGGT
MGGGGGD
TGGGGGT
TGGGGGT
TGHHGGT
Sample #1:
1

Sample #2:
2

HINT:

Sample #1:
在食用蜂蜜一分鐘後,米可可以在兩分鐘內,直接往右走最短路徑躲過蜂群而安全返家。

Sample #2:
在食用蜂蜜兩分鐘後,米可能夠在第三分鐘走→↑→,第四分鐘走→→→,第五分鐘走↓→,以安全返家。

評分資訊:
佔總分 40 分的測試資料中,N 不超過 60。

Source:

IOI 2009

Problem Setter

Testdata:

TestTimeMemoryScore
0-11000ms65536kb
0-21000ms65536kb
11000ms65536kb1
21000ms65536kb1
31000ms65536kb1
41000ms65536kb1
51000ms65536kb1
61000ms65536kb1
71000ms65536kb1
81000ms65536kb1
91000ms65536kb1
101000ms65536kb1
111000ms65536kb1
121000ms65536kb1
131000ms65536kb1
141000ms65536kb1
151000ms65536kb1
161000ms65536kb1
171000ms65536kb1
181000ms65536kb1
191000ms65536kb1
201000ms65536kb1
211000ms65536kb1
221000ms65536kb1
231000ms65536kb1
241000ms65536kb1
251000ms65536kb1
261000ms65536kb1
271000ms65536kb1
281000ms65536kb1
291000ms65536kb1
301000ms65536kb1
311000ms65536kb1
321000ms65536kb1
331000ms65536kb1
341000ms65536kb1
351000ms65536kb1
361000ms65536kb1
371000ms65536kb1
381000ms65536kb1
391000ms65536kb1
401000ms65536kb1
411000ms65536kb1
421000ms65536kb1
431000ms65536kb1
441000ms65536kb1
451000ms65536kb1
461000ms65536kb1
471000ms65536kb1
481000ms65536kb1
491000ms65536kb1
501000ms65536kb1
511000ms65536kb1
521000ms65536kb1
531000ms65536kb1
541000ms65536kb1
551000ms65536kb1
561000ms65536kb1
571000ms65536kb1
581000ms65536kb1
591000ms65536kb1
601000ms65536kb1
611000ms65536kb1
621000ms65536kb1
631000ms65536kb1
641000ms65536kb1
651000ms65536kb1
661000ms65536kb1
671000ms65536kb1
681000ms65536kb1
691000ms65536kb1
701000ms65536kb1
711000ms65536kb1
721000ms65536kb1
731000ms65536kb1
741000ms65536kb1
751000ms65536kb1
761000ms65536kb1
771000ms65536kb1
781000ms65536kb1
791000ms65536kb1
801000ms65536kb1
811000ms65536kb1
821000ms65536kb1
831000ms65536kb1
841000ms65536kb1
851000ms65536kb2
861000ms65536kb2
871000ms65536kb2
881000ms65536kb2
891000ms65536kb2
901000ms65536kb2
911000ms65536kb2
921000ms65536kb2