P-7-10. 挖坑跳 (@@) (TOI 入營考)


Submit solution

分數: 100 (partial)
時間限制: 1.0s
記憶體限制: 1G

作者:
題目類型
允許的語言
Assembly, Brainfuck, C, C++, Python

小雨喜歡在土堆上挖坑,在坑裡注入水之後,然後玩跳水坑的遊戲。
一個庭院被畫分成 \(m \times n\) 個相同大小的矩陣方格,每一個格子可能是土堆或水坑。
一個水坑格子與其上下左右四個方向的水坑格子被視為連通的同一個水坑。
我們需要計算有多少個水坑以及最大的水坑佔多少個格子。

除了一開始的土堆與水坑,小雨每次會指定將某個格子變成水坑。
如果這個方格是新挖出來的水坑,有可能把附近的水坑連在一起。
小雨一共挖了 \(k\) 次,請你計算出每一次挖了之後的水坑數與最大水坑面積。

土堆與水坑的資訊可以看成一個二維矩陣,以 \(0\) 表示土堆,而 \(1\) 表示水坑,位置的標示方式以左上角為 \((1,1)\),右下角為 \((m, n)\)。

例子

以下是一個 \(m = 3, n = 5\) 的例子。
一開始的水坑資料如下:

\[\begin{matrix} 1 & 0 & 0 & 1 & 1 \\ 0 & 1 & 1 & (0) & 1 \\ 1 & 1 & 0 & 0 & 1 \end{matrix}\]

我們可以看出來有 3 個水坑:

  1. 左上角只佔 1 格的水坑
  2. 左下有一個 4 格的水坑
  3. 右方有一個 4 格的水坑

假設現在小雨把 \((2,4)\) 的土堆改成水坑(括號所在位置),左下與右方的水坑便會連接成一個面積為 9 的水坑。

輸入格式

第一行是三個整數,依序是 m, n 與 k, 接下來 m 行是土堆與水坑資料,每一行有 n 個 0 或 1 的數字,順序為由上而下,從左至右。 最後一行有 2k 個數字, 依序每兩個代表一個被挖成水坑的位置(i,j),如果該位置本來就是水坑,就代表沒有動作。 m 與 n 不會超過 500,k 不超過 20000。

輸出格式

輸出兩行,第一行是每次最大水坑面積的總和(包含一開始,所以有 k+1 次), 第二行是每次水坑數量的總和。

範例輸入 1

3 5 1
1 0 0 1 1
0 1 1 0 1
1 1 0 0 1
2 4

範例輸出 1

13
5

範例輸入 2

2 6 2
0 1 1 0 1 1
0 1 0 0 0 1
2 4 1 4

範例輸出 2

14
6

評論

目前沒有評論。