校內模擬 三格骨牌

2021-09-24 21:33:14 字數 1203 閱讀 7277

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 個木棍,現在知道了每個木棍的長度,要從中挑出三個木棍組成乙個三角形,如何挑選木棍,使得組成的三角形的面積最大 由於出題人不會做 由於上面的要求過於毒瘤,良心的出題人將題面改為了求乙個方案使得三角形的周長最大 輸出這個三角形的三邊長和面積 輸入格...