splix.io 是一款基於區域控制概念的即時多人線上遊戲。玩家操控一條代表自身勢力的蛇,在由方格構成的地圖上移動並佔領區域。每當玩家離開自己的領地,蛇的移動路徑上會留下痕跡。若成功繞行並回到領地,所包圍的區域將歸入自己的版圖。玩家需謹慎規劃路徑,避免與自身或他人的痕跡相撞,同時尋找機會攻擊對手。遊戲兼具戰略性與風險管理,最終排名依據玩家佔領的面積決定。
在本題中,考慮一個不同的情境:棋盤上只有你控制的蛇,並且可能存在若干「燒紅的石頭」。蛇的移動遵循以下規則:
以下是遊玩畫面的示例。圖中綠色區域是領地,藍色部分是蛇的身體,黃色部分是蛇的頭部。下一回合若要避免撞到身體,蛇只能選擇向左、右或向下移動。
碰到身體的情況如下:
碰到身體前 | 碰到身體後 |
![]() | ![]() |
以下是佔領領地的過程。淺藍色的是 $X$ 邊,粉紅色的是 $Y$ 邊,紅色內部為封閉區域。
佔領領地前 | 正在佔領 | 計算封閉區域 | 佔領領地後 |
![]() | ![]() | ![]() | ![]() |
包圍燒紅的石頭也是不被允許的行為,下圖中紅色的格子代表燒紅的石頭。
現在,給定一個 $N \times M$ 的棋盤,初始位置在 $S$,並存在若干燒紅的石頭。在可以無次數上限移動且不死亡的前提下,試問蛇所能成功佔領的最大格子數是多少。
第一行輸入有兩個數字 $N, M$,分別代表棋盤的長和寬。
接著 $N$ 行每行有 $M$ 個字母,分別表示棋盤上每個格子上面有什麼。其中:
S
表示蛇的初始位置#
表示燒紅的石頭.
表示空白資料範圍:
輸出一個正整數,代表可以佔領的最大格子數。
3 3 ... S#. ...
1
3 3 ..# S.. #..
7
3 3 ... S.. #.#
6
5 5 #...# ..... S.#.. ..... #...#
20
7 7 ....... ....... ...#... ..###.. #...... ##..... ##....S
39
小提醒:移動方向可能會影響封閉區域的判定。
範例的方向 | 反著走 |
![]() | ![]() |
YTP 2025 高中組程式挑戰營 p14
No. | Testdata Range | Constraints | Score |
---|---|---|---|
1 | 0~4 | 範例測試資料 | 0 |
2 | 0~23 | 無額外限制 | 20 |