1. 程式人生 > >掃描線-小Z的桌子

掃描線-小Z的桌子

最大 桌子 處理 font 長子 初始 同一行 有一個 預處理

大概題意:在一個01矩陣中找到一個周長最大的全0矩形。

這道題用的是掃描線,O(n^2),求最大面積的思路完全可以放在這裏。下面說說思路。

首先,一個最大周長子矩形(最大周長全0矩形),左右兩側的列上一定至少有一個1,不然顯然這個矩形可以再往左/右擴展。

由於這個,我們聯想到找矩形兩邊的1。初始想法是先n方,預處理一個點上面有多少點,下面有多少點。枚舉出每一行的每一段連續的0,將這些每個點的up和down加起來減1,取min,這就是這個可能最大周長子矩形的最大可能高。答案即是高+寬乘2。

但是,這種做法有幾個小問題,以後做掃描線的題目時一定要註意:

1.初始想法中直接統計最小高的想法是錯的。例如:

4 5

XX.XX

XX.XX

X...X

X.X.X

顯然,應該分別統計minup和mindown。

2.兩個邊界上的1不一定在同一行,例如:

.

X.

.X

.

.

但是,我們一定可以保證它一定緊貼一邊的x,所以我們只需統計0序列的所有前綴即可。

這樣就沒有錯了

掃描線-小Z的桌子