雪地只有腳印和空白兩種狀態,可以分別用1和0代表。而查詢某一塊區域是否可行,就是查詢這塊區域內所有點的和是否為0,自然用二維字首和比較合適。
設某一塊矩形左上角的座標為(i
,j) (i,
j),短邊長為
k k
,對i,
j,k' role="presentation" style="position: relative;">i,j
,ki,
j,k進行列舉,即可得到暴力做法,時間複雜度o(
n3) o(n3)。
//s是字首和陣列
int ans = 0;
for (int i = 1; i <= n; ++i)}}
}
但是,這樣只能通過40%40%
的資料。
再考慮一下,能否縮小列舉的邊長範圍。可以發現,若用f[
i,j]
f [i
,j]表示右下角在(i
,j) (i,
j)的最大可行區域的邊長,f[
i,j]
f [i
,j]不會超過f[
如圖,紅色部分為右下角在點a的最大可行區域,現在考慮右下角在點b的最大可行區域。若其邊長比a大2(黃色部分),則黑框範圍同樣是右下角在點a的可行區域,矛盾。因此,區域b的邊長最多比a大1(橙色部分)。利用這個性質,當整張圖中腳印分布較為均勻時,可以大大縮小邊長的列舉範圍。
//a是原陣列,s是字首和,f如上所述
for (int i = 1; i <= n; ++i)}}
}
SJTUOJ筆記 P1092 小F的地板
我們先來看一看這個問題的簡化版本 只用1 2 1 2 和2 1 2 1 兩種方塊覆蓋m n m n 的平面。首先,狀態壓縮是毋庸置疑的。若某個方塊被覆蓋則為1,沒有被覆蓋則為0。這樣,每一行的狀態可以用乙個二進位制數來表示,且其轉化為十進位制的大小不超過29 512 2 9 512。為了下文擴充套件...
P2P閱讀筆記
1 full cone nat socket nat會給其分配乙個公網 publicip publicport socket向外面任何主機傳送資料都將使用這對 publicip publicport 任何主機只要知道這個 publicip publicport 就可以傳送資料給 publicip p...
STM32F107 CAN除錯筆記 標準庫
參考 enabling interrupt nvic initstructure.nvic irqchannel can1 rx0 irqn nvic initstructure.nvic irqchannelpreemptionpriority 3 nvic initstructure.nvic ...