SNOI2019 紙牌(麻將DP)(矩陣快速冪)

2021-09-28 17:18:43 字數 1424 閱讀 7367

今年省選好多麻將dp。。。

說的是紙牌,但是寫過麻將dp的都知道這是麻將dp的乙個套路。

以下把三張連著的牌叫做順子,三張相同的牌叫做刻子。

不允許同型別順子出現超過兩次,否則我們可以用三個刻子來換掉。

實際上我們發現影響我們用多少張i

ii牌的只有前面的i−2

,i−1

i-2,i-1

i−2,i−

1開頭的順子有多少個。

決定方案數不同的實際上是我們在當前狀態下有多少空閒的刻子可以放。

把i −2

,i−1

i-2,i-1

i−2,i−

1的順子個數壓成乙個狀態,發現轉移可以寫成矩陣的形式,注意到只有題目給出的地方需要特殊處理,中間直接用快速冪轉移即可。

**:

#include

#define ll long long

#define re register

#define cs const

using std::cerr;

using std::cout;

cs int mod=

998244353

;inline

intadd

(int a,

int b)

inline

intdec

(int a,

int b)

inline

intmul

(int a,

int b)

inline

void

inc(

int&a,

int b)

inline

void

dec(

int&a,

int b)

inline

void

mul(

int&a,

int b)

struct mat

int*

operator

(int o)

cs int

*operator

(int o)cs

friend mat operator

*(cs mat &a,cs mat &b)};

mat a,b[61]

,tmp;

ll n,k[

1007];

int c,x,a[

1007];

inline mat pw_b

(ll t)

signed

main()

a=a*tmp;

}a=a*

pw_b

(n-k[x]);

cout<[0

]<<

"\n"

;return0;

}

SNOI2019 字串題解

目錄code 洛谷p5329 題目意思很明確,但似乎不太好求。還是先看看部分分。theta n 2 log n 暴力,先得10分。發現一件事,在比較 s i 和 s j 時,假設 i,從1到i 1這一段是一樣的,從j 1到n是一樣的,所以我們只要比較原串的i 1 j和i j 1這兩段就行。由於任意相...

LOJ3099 SNOI2019 積木(搜尋)

lca 學長出的我省省選的神仙題目 省強我菜系列 loj3399 我可能說不清楚,對著 理解吧 感覺這題的主要難點是 不要想他具體是怎麼操作的,只要知道他一定存在一種操作方式能夠實現就行了。首先要注意到乙個很重要的性質 對於當前空格所在的點,除非這個點在目標中就是空格,否則一定可以通過一步操作使這個...

題解 P5329 SNOI2019 字串

用棧的做法來水一發。首先我們有乙個暴力的做法,列舉每個被刪除的字元,然後排序輸出,時間複雜度 o n times n times logn 然後我們觀察一下資料,發現有乙個資料點且任意兩個相鄰字元 a i 與 a 不相等 那麼我們考慮這樣乙個字串 acdedc 比如現在我們比較去掉第三位的字串和去掉...