t次詢問,每次將乙個nm的棋盤分成nm/3塊大小為3的四連通塊,再給每個四連通塊標號,使得每塊的標號不同,並且對於乙個格仔,其左邊和上邊的標號要小於等於其本身的標號
問方案數,對10^9+7取模
t<=10,n,m<=10^4
考慮按標號從小到大填連通塊,那麼每次填完後的圖形必然是左上角的一塊
考慮這一塊的輪廓線,必然只有往上和往右的,那麼我們設1為上,0為右,可以用乙個2^(n+m)的二進位制狀態表示輪廓線
考慮轉移,不難發現每次都是對輪廓線長度為4的一段進行轉移,並且只有4種轉移
1000->0001
1010->0011
1100->0101
1110->0111
發現轉移可以規約為「選擇乙個1,和其右邊三格的0交換」
這個和中間的數無關,於是我們把狀態模3分組,每組的操作次數是一定的,最後用組合數組合起來
考慮一組,問題變成了從11…11000…000轉移到00.00111…111,一次轉移是相鄰的10變為01
重新考慮原來的輪廓線意義,發現和原問題基本等價,只是每次選擇乙個大小為1的塊轉移,這樣的方案數等價於直接標號的方案數
問題變成了nm的網格圖,將1~nm!填入,滿足對於乙個格仔,其左邊和上邊格仔填的數要嚴格小於其上的數
這相當於問對於有多少個nm的標準楊表,運用frame-robinson-thrall可以直接得出答案
複雜度o(nm+t(n+m)log)
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
using
namespace std;
typedef
long
long ll;
const
int mo=
1e9+7;
intpwr
(int x,
int y)
int n,m,ty,fac[
33333334
],inv[
20000
],cnt[3]
[2];
intcalc
(int n,
int m)
return ans;
}int
main()
return0;
}
Mysql 入門學習三 格式
資料庫的三大設計正規化 sql 1 第一正規化 1nf 資料表中的所有欄位都是不可分割的原子值?字段值還可以繼續拆分的,就不滿足第一格式。正規化,設計的越詳細,對於某些實際操作可能更好,但是不一定都是好處。2 第二正規化 必須是滿足第一正規化的前提下,第二正規化要求,除主鍵外的每一列都必須完全依賴與...
校內模擬 三角形
題目鏈結 時限 100ms 空間 512mb 無有 n 個木棍,現在知道了每個木棍的長度,要從中挑出三個木棍組成乙個三角形,如何挑選木棍,使得組成的三角形的面積最大 由於出題人不會做 由於上面的要求過於毒瘤,良心的出題人將題面改為了求乙個方案使得三角形的周長最大 輸出這個三角形的三邊長和面積 輸入格...