HDU 2243 考研路茫茫 單詞情結

2021-07-11 22:17:34 字數 1545 閱讀 8092

這道題和poj2778類似都需要利用end陣列和next陣列的特性構建狀態陣列,不過這裡是需要經過至少乙個目標串,而且長度是不小於l的,即需要長度為1~l時的種數和。然後我們可以求出總數後減去不經過目標串的和,剩下的就是我們要的答案。設總數的陣列為f[n],當n為1時答案為26,n為2時為26+26^2,即f[n]=(f[n-1]+1)*26;由於n等於l小於2^31,所以一樣用矩陣快速冪求出再減去不經過目標串的1~l的和。而這個和可以在矩陣上再增加一維就可以解決和的問題了。**如下

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int mod=

100000

;struct

matrix

matrix

(int _n)

matrix

operator

*(const

matrix

&b)const};

matrix

pow_m

(matrix

a,int n)

return ret;

}struct

tree

void

init

()int

judge

(char c)

void

insert

(char

*s) end[p]++;

}void

build()}

while

(!q.

empty

())else}}

}int used[

1010

];void

query

(char

*s,int n)

temp=fail[temp];}}

}matrix

getmatrix

()void

debug()}

};tree

ac;char str[

20];

intmain

() ac.

build

();matrix

a=ac.

getmatrix

(); a=

pow_m

(a,l);

matrixb(

2);b.mat[0][

0]=26;

b.mat[1][

1]=b.mat[1][

0]=1;

b=pow_m

(b,l);

unsigned

long

long ans=

0,res=0;

res+=b.mat[0][

0]+b.mat[1][

0];for(

int i=

0;i;i++)

cout<}}

hdu 2243 考研路茫茫 單詞情結

hdoj 2243 不僅僅是考研路茫茫 a此題的過程也是路茫茫 終於到最後柳暗花明了 a這個題用了3天 或者說用了1個月 因為1個月前就學了kmp和ac自動機 雖然上個月那節課學了kmp匹配演算法 字典樹 ac自動機。當時就聽得一頭霧水 特別是kmp那個失敗指標 或者說成是next fail.有那麼...

hdu 2243 考研路茫茫 單詞情結

題目大意 問長度為1 n的串中包含了模式串的串總共有幾個。題目思路 求出長度不大於l的包含模式串的字串數,方法是改求不包含模式串的字串總數,當然先要處理出總的字串個數,可以用矩陣也可以用二分冪和的方法。而求不包含模式串的字串數同樣是構造矩陣,同時還要建立乙個虛結點,儲存長度小於l的不包含模式串的字串...

HDU2243 考研路茫茫 單詞情結

傳送門 to hdu 傳送門 to vj 考慮一位一位的加入字元,我們只在乎當前字串末尾的匹配情況。既然如此,我們用 acac ac自動機上的乙個節點來表示狀態就可以了。現在是乙個 dpdp dp轉移。似乎要儲存是否曾經出現過詞根?其實不用,只需要用所有情況減去一次都沒有出現過的情況即可。向量中加入...