HDU 2243 考研路茫茫 單詞情結 自動機

2021-09-07 23:09:37 字數 1188 閱讀 1383

題意:給出m個串,問有多少不大於n的串至少包含m個串中的乙個?

思路:首先求出不包含m個串的長度不大於n的串的個數,也就是對應矩陣a:s=a^1+a^2+……a^n。然後就是26+26^2+26^3+……+26^n-s。

const int mod=100000;

const int n=105;

struct node

};node a[n];

int e,n,m;

char s[n];

void insert(char s)

p=a[p].next[k];

}a[p].flag=1;

}queueq;

void build()

q.push(p);

}else}}

}u64 b[n][n],d[n][n];

void mul(u64 a[n],u64 b[n])

; for0(k,e) for0(i,e) for0(j,e)

for0(i,e) for0(j,e) b[i][j]=c[i][j];

}u64 getpow(u64 a,u64 b)

return ans;

}void copymatrix(u64 a[n],u64 b[n])

u64 getsum(u64 a,u64 n)

void initmatrix(u64 a[n])

void getpow(u64 a[n],u64 b[n],int n)

}void addmatrix(u64 a[n],u64 b[n])

void print(u64 a[n])

puts("");

}u64 c[n][n],d[n][n],e[n][n];

void getsum(u64 a[n],u64 b[n],int n)

if(n&1)

else

}int main()

u64 sum=getsum(26,n),x=((u64)1)<<63;;

getsum(b,d,n);

for0(i,e) if(!a[i].flag) sum-=d[0][i];

printf("%i64u\n",sum);

}return 0;

}

hdu 2243 考研路茫茫 單詞情結

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

HDU 2243 考研路茫茫 單詞情結

這道題和poj2778類似都需要利用end陣列和next陣列的特性構建狀態陣列,不過這裡是需要經過至少乙個目標串,而且長度是不小於l的,即需要長度為1 l時的種數和。然後我們可以求出總數後減去不經過目標串的和,剩下的就是我們要的答案。設總數的陣列為f n 當n為1時答案為26,n為2時為26 26 ...

hdu 2243 考研路茫茫 單詞情結

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