天天看點

CH5E26 撲克牌

題意

一副不含王的撲克牌由52張牌組成,由紅桃、黑桃、梅花、方塊4組牌組成,每組13張不同的面值。現在給定52

張牌中的若幹張,請計算将它們排成一列,相鄰的牌面值不同的方案數。

牌的表示方法為XY,其中X為面值,為2、3、4、5、6、7、8、9、T、J、Q、K、A中的一個。Y為花色,為S、

H、D、C中的一個。如2S、2H、TD等。

第一行為一個整數T,為資料組數。

之後每組資料占一行。這一行首先包含一個整數N,表示給定的牌的張數,接下來N個由空格分隔的字元串,每個字元串長度為2,表示一張牌。每組資料中的撲克牌各不相同。

對于每組資料輸出一行,形如"Case #X: Y"。X為資料組數,從1開始。Y為可能的方案數,由于答案可能很大,

請輸出模2^64之後的值。

1 ≤ T ≤ 20000,1 ≤ N ≤ 52

分析

由于相同種類的牌的牌數隻有1-4,而方案數容斥跟牌數相關,是以考慮以牌數建立狀态。設\(F[a][b][c][d]\),表示1張的有a種,2張的有b種,3張的有c種,4張的有d種。

考慮如何容斥。首先如果放的是1張牌的,就隻有a種方案。當牌數大于1時,用一個決策後的狀态計算,要減去它轉移到的不合法的狀态。

代碼