ZJOI2007 棋盤製作 最大同色矩形

2022-02-28 01:43:14 字數 2213 閱讀 5860

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8*8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。

而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定將棋盤擴大以適應他們的新規則。

小q找到了一張由n*m個正方形的格仔組成的矩形紙片,每個格仔被塗有黑白兩種顏色之一。小q想在這種紙中裁減一部分作為新棋盤,當然,他希望這個棋盤盡可能的大。

不過小q還沒有決定是找乙個正方形的棋盤還是乙個矩形的棋盤(當然,不管哪種,棋盤必須都黑白相間,即相鄰的格仔不同色),所以他希望可以找到最大的正方形棋盤面積和最大的矩形棋盤面積,從而決定哪個更好一些。

於是小q找到了即將參加全國資訊學競賽的你,你能幫助他麼?

輸入格式:

包含兩個整數n和m,分別表示矩形紙片的長和寬。接下來的n行包含乙個n * m的01矩陣,表示這張矩形紙片的顏色(0表示白色,1表示黑色)。

輸出格式:

包含兩行,每行包含乙個整數。第一行為可以找到的最大正方形棋盤的面積,第二行為可以找到的最大矩形棋盤的面積(注意正方形和矩形是可以相交或者包含的)。

輸入樣例#1:

3 3

1 0 1

0 1 0

1 0 0

輸出樣例#1:

4

6

對於20%的資料,n, m ≤ 80

對於40%的資料,n, m ≤ 400

對於100%的資料,n, m ≤ 2000

首先,我們選出所有01聯通塊,只需要乙個很簡單的做法,就是隔乙個反轉乙個數字,具體來講,就是將i+j為偶數的(i,j)反轉

反轉之後呢,就是最大同色矩形問題

最大同色矩形問題,顧名思義,就是求乙個矩陣中的最大同色矩形

用到 動歸 + 並查集 + 排序

具體而言,我們先求出h[i][j]為從(i,j)點向右擴充套件最遠的距離

利用dp可以在o(n^2)內求出

for (int i = 1; i <= n; i++)

}

這樣,我們就可以很快求出橫向邊的長度,如何求出縱向邊呢?

由於是縱向邊,我們就在每一列討論:

對於j這一列,我們按h的大小從大到小列舉,列舉到當前行i時,包含i的矩形的橫向邊長度一定是i,而縱向邊的長度就是當前從i出發向上向下能經過已訪問點的最長長度【因為只有已訪問的點的h比i大,才能使h[i][j]作為橫向長度】,具體用兩個並查集l[i],r[i]實現

#include#include#include#include#define ll long long int

using namespace std;

const int maxn = 2005,maxm = 100005,inf = 2000000000;

inline int read()

while (c >= 48 &&c <= 57)

return out * flag;

}int n,m,a[maxn][maxn],l[maxn],r[maxn],h[maxn][maxn];

bool vis[maxn];

struct nodetmp[maxn];

inline bool operator < (const node& a,const node& b)

inline int findl(int u)

inline int findr(int u)

void init()

void solve()

} for (int j = 1; j <= m; j++)

sort(tmp + 1,tmp + 1 + n);

for (int i = 1; i <= n; i++)

if (k < n && vis[k + 1] && a[k + 1][j] == a[k][j])

a = findr(k) - findl(k) + 1;

b = tmp[i].len;

ans1 = max(ans1,min(a,b) * min(a,b));

ans2 = max(ans2,a * b);

} }printf("%d\n%d\n",ans1,ans2);

}int main()

ZJOI2007 棋盤製作

題目描述 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w...

ZJOI2007 棋盤製作

十二年前的zjoi我現在還切不過我是不是可以退役了 傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作...

棋盤製作 ZJOI2007

題目傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小...