bzoj1057 ZJOI2007 棋盤製作

2021-07-28 07:53:00 字數 1395 閱讀 9868

傳送門

我們可以先用o(nm)時間求出向左向右擴充套件的最大距離

然後o(nm)列舉下端點位置(在矩形下面的邊上)

計算出當高最高時的寬度,相乘後取max

正方形同理,只要取高度和寬度的min就行了。

uses math;

var hei,a,x,y,le,ri:array [0..2005,0..2005] of longint;

n,m,i,j,maxju,maxzh:longint;

begin

read(n,m);

for i:=1

to n do

for j:=1

to m do

read(a[i,j]);

for i:=1

to n do

begin

x[i,1]:=1;

for j:=2

to m do

if (a[i,j]<>a[i,j-1]) then x[i,j]:=x[i,j-1] else x[i,j]:=j;

end;

for i:=1

to n do

begin

y[i,m]:=m;

for j:=m-1

downto1do

if (a[i,j]<>a[i,j+1]) then y[i,j]:=y[i,j+1] else y[i,j]:=j;

end;

maxju:=0;

maxzh:=0;

for i:=1

to n do

for j:=1

to m do

if (a[i,j]<>a[i-1,j]) and (i<>1) then

begin

hei[i,j]:=hei[i-1,j]+1;

le[i,j]:=max(le[i-1,j],x[i,j]);

ri[i,j]:=min(ri[i-1,j],y[i,j]);

endelse

begin

hei[i,j]:=1; le[i,j]:=x[i,j]; ri[i,j]:=y[i,j];

end;

for i:=1

to n do

for j:=1

to m do

maxju:=max(maxju,hei[i,j]*(ri[i,j]-le[i,j]+1));

for i:=1

to n do

for j:=1

to m do

maxzh:=max(maxzh,sqr(min(hei[i,j],ri[i,j]-le[i,j]+1)));

writeln(maxzh);

write(maxju);

end.

BZOJ1057 ZJOI2007 棋盤製作

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

BZOJ1057 ZJOI2007 棋盤製作

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

bzoj1057 ZJOI2007 棋盤製作

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