ZJOI2007 棋盤製作

2022-08-20 02:12:13 字數 2211 閱讀 6396

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

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

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

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

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

包含兩個整數 nn 和 mm ,分別表示矩形紙片的長和寬。接下來的 nn 行包含乙個 n \ \times mn ×m 的 0101 矩陣,表示這張矩形紙片的顏色( 00 表示白色, 11 表示黑色)。

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

3 31 0 1

0 1 0

1 0 046

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

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

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

懸線法

發現dp以前留的坑太大慢慢補

h[i][j]表示以(i,j)為底,能向上延伸的最長長度

l[i][j]表示點(i,j)最多能向左擴充套件到**

r[i][j]表示點(i,j)最多能向右擴充套件到**

每次h[i][j]從上面遞推,l[i][j]從左邊遞推,r[i][j]從右邊遞推

單排單列的情況已經在點(i,j)靠近邊界時計算

所以只需l[i][j]與l[i - 1][j]取個max,r[i][j]與r[i - 1][j]取個min

此時的矩形高度就可以保證是h[i][j]了

#include#include#include#includeconst int m = 2005 ;

const int inf = 256 ;

using namespace std ;

inline int read()

while(c>='0'&&c<='9')

return x*w ;

}int n , m ;

int val[m][m] ;

int h[m][m] , l[m][m] , r[m][m] ;

int ans2 , ans1 ;

int main()

for(int i = 0 ; i <= n + 1 ; i ++) val[i][0] = val[i][m + 1] = inf ;

for(int i = 0 ; i <= m + 1 ; i ++) val[0][i] = val[n + 1][i] = inf ;

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

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

if(val[i][j] != val[i][j - 1])

l[i][j] = l[i][j - 1] ;

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

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

if(val[i][j] != val[i][j + 1])

r[i][j] = r[i][j + 1] ;

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

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

int a = r[i][j] - l[i][j] + 1 ;

int temp = min(a , h[i][j]) ;

ans1 = max(ans1 , temp * temp) ;

ans2 = max(ans2 , a * h[i][j]) ;

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

return 0 ;

}

ZJOI2007 棋盤製作

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

ZJOI2007 棋盤製作

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

棋盤製作 ZJOI2007

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