bzoj1009矩陣快速面 kmp

2022-05-17 17:06:01 字數 722 閱讀 4767

其實kmp真的很次要,求長度為20的kmp感覺真的有點殺雞用牛刀

這題思路相當明確:一看題就是數字dp,一看n的大小就是矩陣

矩陣的構造用m*m比較方便,本來想寫1*m的矩陣乘m*m的,但是感覺想起來太麻煩就偷懶,沒想到1a了

log的速度的確可以,87ms賊快,好久沒見這麼短的執行時間了

1 #include 2

intn,m,mod,k;

3char

ch;4

int a[100],ne[100];5

int ans[100][100],t[100][100],zy[100][100];6

void mul(boolb)7

18int

main()

1930

for(int i=0;i)

31for(int j=0;j<=9;j++)

3238

for(int i=0;i)

39 ans[i][i]=1;40

while

(n)41 mul(n&1

);42

int sum=0;43

for(int i=0;i)

44 sum=(sum+ans[i][0])%mod;

45 printf("%d"

,sum);

46return0;

47 }

bzoj1009(kmp,dp,矩陣乘法,快速冪)

description 阿申準備報名參加gt考試,准考證號為n位數x1x2 xn 0 xi 9 他不希望准考證號上出現不吉利的數字。他的不吉利數學a1a2 am 0 ai 9 有m位,不出現是指x1x2 xn中沒有恰好一段等於a1a2 am.a1和x1可以為 0input 第一行輸入n,m,k.接下...

bzoj1009 GT考試 dp 矩陣快速冪

題意 構造乙個字串 數字0 9 不含乙個子串的個數 我這麼蒟蒻腫麼可能想到是dp嘛 定義f i j 表示當前構造了i位,與模式串p匹配了前j位的方案數 然後列舉下一位填什麼,然後乘上當前構造出來的和模式串匹配到k的方案數。即是f i 1 k f i j a j k 因為從j轉移到k,可以用的數字不一...

BZOJ 1009 GT考試 KMP 矩陣快速冪

題意 b為非法數字b 1 b m 其位數 20.某個數有n位,每位可以填入 0,9 n 1e9 問有多少種填數字方案,滿足n位中沒有非法數字m出現?先不考慮n範圍 則可以設定dp i j 表示放了合法放了前i位,其字尾j和非法的前j位相同的方法數.轉移狀態顯然是一位一位新增 顯然dp i 1 j 1...