型別:單調棧
傳送門:>here
<
題意:給出乙個$01$矩陣,求$01$相間的最大子正方形和最大子矩陣解題思路
首先考慮如果要求的不是$01$相間而是全$1$的怎麼做?那就和上一題一樣了,預處理$p[i][j]$。特判正方形(取較短邊)
那麼只需要把問題轉化為全$1$矩陣即可。思考黑白相間矩陣的特性:無非兩種情況,肯定有一種顏色,滿足它的格仔的座標要麼全是偶數,要麼全是奇數
於是我們只需要在讀入的過程中把座標都是偶數或奇數的格仔進行異或。然後對黑色和白色分別做一遍單調棧統計最大子矩形即可
code
由於$p$陣列需要處理兩次,第二次不能受到第一次的影響。因此需要把不能取的重新置為0
/*by dennyqi 2018.8.18
*/#include
#include
#include
#include
#define r read()
#define max(a,b) (((a)>(b)) ? (a) : (b))
#define min(a,b) (((a)<(b)) ? (a) : (b))
using
namespace
std;
typedef
long
long
ll;const
int maxn = 10010
;const
int maxm = 27010
;const
int inf = 1061109567
;inline
intread()
intn,m,ans1,ans2,top,cnt,tmp;
int a[2010][2010],h[2010],w[2010],p[2010][2010
];inline
void
solve()
else
h[++top] =p[i][j];
w[top] = cnt + 1
; }
}cnt = 0
;
while(top > 0
) }
}int
main()
if(!a[i][j])
else}}
solve();
for(int i = 1; i <= n; ++i)
else}}
solve();
printf(
"%d\n%d\n
",ans1,ans2);
return0;
}
ZJOI2007 棋盤製作
題目描述 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小w...
ZJOI2007 棋盤製作
十二年前的zjoi我現在還切不過我是不是可以退役了 傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 times 88 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作...
棋盤製作 ZJOI2007
題目傳送門 西洋棋是世界上最古老的博弈遊戲之一,和中國的圍棋 象棋以及日本的將棋同享盛名。據說西洋棋起源於易經的思想,棋盤是乙個8 8大小的黑白相間的方陣,對應八八六十四卦,黑白對應陰陽。而我們的主人公小q,正是西洋棋的狂熱愛好者。作為乙個頂尖高手,他已不滿足於普通的棋盤與規則,於是他跟他的好朋友小...