ZJNU 2136 會長的正方形

2022-05-22 18:15:09 字數 1163 閱讀 3303

對於n*m網格

取min(n,m)作為最大的正方形邊長

則答案可以表示成

s=1~min(n,m)

對於乙個s*s的正方形

用oblq陣列儲存有多少四個角都在這個正方形邊上的正方形

以4*4為例

除了4*4自身外,四個角在邊上的正方形還有

所以4*4網格最多可以有4種正方形存在

推出s*s網格最多可以有s種正方形存在

單看這些正方形在網格上側的點所在位置

可以發現這種「斜正方形」共有s-1種情況

且每個正方形的邊長為

因為s=c^2

所以每個正方形面積為

取和,加上原本的面積s*s,存放在oblq[s]內便於引用

然後考慮組合情況

對於乙個n*m的網格,裡面可以組合出(n-s+1)*(m-s+1)種s*s的正方形

所以每次數量加上(n-s+1)*(m-s+1)*s

面積加上(n-s+1)*(m-s+1)*oblq[s]

取和即可得到答案

**多加了個t變數,每次讓n和m遞減,t遞增,意義不變

#includeusing

namespace

std;

typedef

long

long

ll;const ll mod=1000000007

;ll oblq[

10005

];int

main()

cin>>t;

while(t--)

cout'}

return0;

}

最大的正方形

最大的正方形 描述 給你乙個n m的矩陣,每個位置的值是0或1,求乙個面積最大的子矩陣,這個矩陣必須是乙個正方形,且裡面只能由1構成,輸出最大的正方形邊長 執行時間限制 2 sec 記憶體限制 無限制 輸入 第一行輸入兩個整數n,m,之後n行,每行m個數字,為矩陣第i行第j列的值,只可能是0或者1 ...

理想的正方形

有乙個a x b的整數組成的矩陣,現請你從中找出乙個n x n的正方形區域,使得該區域所有數中的最大值和最小值的差最小。第一行為三個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。輸出僅乙個整數,為axb矩陣中所有nxn正方形區域中的最大整數和最小整數的...

HAOI 2007 理想的正方形

有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數,為a b矩陣中所有 ...