BZOJ1057 ZJOI2007 棋盤製作

2021-08-08 20:59:15 字數 1870 閱讀 7388

西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋、象棋以及日本的將棋同享盛名。據說西洋棋起源

於易經的思想,棋盤是乙個8*8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,

正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w決定

將棋盤擴大以適應他們的新規則。小q找到了一張由n*m個正方形的格仔組成的矩形紙片,每個格仔被塗有黑白兩種

顏色之一。小q想在這種紙中裁減一部分作為新棋盤,當然,他希望這個棋盤盡可能的大。不過小q還沒有決定是找

乙個正方形的棋盤還是乙個矩形的棋盤(當然,不管哪種,棋盤必須都黑白相間,即相鄰的格仔不同色),所以他

希望可以找到最大的正方形棋盤面積和最大的矩形棋盤面積,從而決定哪個更好一些。於是小q找到了即將參加全

國資訊學競賽的你,你能幫助他麼?

第一行包含兩個整數n和m,分別表示矩形紙片的長和寬。接下來的n行包含乙個n * m的01矩陣,表示這張矩形

紙片的顏色(0表示白色,1表示黑色)。

包含兩行,每行包含乙個整數。第一行為可以找到的最大正方形棋盤的面積,第二行為可以找到的最大矩形棋

盤的面積(注意正方形和矩形是可以相交或者包含的)。

3 31 0 1

0 1 0

1 0 046

n, m ≤ 2000

題解

此題有兩種解法1.單調棧2.懸線法

單調棧:

由於棋盤是相間式的,所以可以把橫縱座標為奇數的全部異或(偶數也行),這樣問題就轉化成了找全0或1的矩陣,可以用單調棧解決,先預處理每一行連續1的個數,然後列舉縱行,對橫行進行單調棧,維護乙個單調遞增的棧,出現乙個比棧頂元素小的數就計算面積跟新答案,注意棧中橫行的標號是連續的,新進來的i減去s[top].num就是中間矩形的高。

#include#include#include#includeusing namespace std;

const int maxn=100010;

int top=0,ans1,ans2,n,m,h[2010][2010],a[2010][2010];

struct nodes[maxn];

inline void push(int i,int h)

s[++top]=(node);

}void work()

}int main()

work();

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

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

work();

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

return 0;

}

懸線法:

所謂懸線法就是,每一列都假設有一條線記錄這條線的高度,能到達的左端點,能到達的右端點。具體的細節在**中標註。

#include#include#include#includeusing namespace std;

const int maxn=100010;

int up[maxn],topl[maxn],topr[maxn],ans1,ans2,nowl,nowr,n,m,a[2010][2010];

void work()

else

} for(int j=m;j>=1;j--)

else

} }}int main()

work();

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

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

work();

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

return 0;

}

BZOJ1057 ZJOI2007 棋盤製作

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

bzoj1057 ZJOI2007 棋盤製作

傳送門 我們可以先用o nm 時間求出向左向右擴充套件的最大距離 然後o nm 列舉下端點位置 在矩形下面的邊上 計算出當高最高時的寬度,相乘後取max 正方形同理,只要取高度和寬度的min就行了。uses math var hei,a,x,y,le,ri array 0.2005,0.2005 o...

bzoj1057 ZJOI2007 棋盤製作

傳送門 圖上的棋子有兩種型別 1.黑格行列奇偶性相同,白格不同 2.白格行列奇偶性相同,黑格不同 判斷同不同的話,直接異或就可以了。然後問題就轉化為求最大01子矩陣了 感覺這個真的挺巧妙的,要是不轉化的話,大概會寫吐?以下是一些廢話。沒錯我越來越話癆了 統計矩形本來寫了懸線法,然後有個地方忘記了怎麼...