比想象中要A的顺利很多,关键还是知道怎么处理矩阵。考察的知识很多,是很多题目的综合。
题意
告诉你N个词根,求长度不超过L,只有小写字母组成,至少包含一个词根的单词个数。
思路
看了至少包含一个,我们自然就应该想到考虑它的对立面,就是一个也不包含,很简单把(我想不到QAQ).然后我们看它几乎就和POJ那个DNA sequence 完全一样了,但是这个题目求的是小于L长度的,所以我们在求出转移矩阵A之后,需要求$$A^1 + A^2 + … A^L$$,这个怎么求呢,请参考POJ 3233,应用的是矩阵快速幂。最后的答案就是总的可能的种类数目也就是($26 ^ 1 + .. 26^n$),再减去最终得到的那个矩阵第一行的和。需要再提几点,就是这个可能的种类数目不要用等比数列求,因为是有余数操作的,但是我没试过到底等比数列行不行,我这里依然是矩阵快速幂求的。另外一个,题目答案要求对$2^{64}$取余,我们不必设置余数,只要把int都换成unsigned long long即可,程序就自动取余了。好久没写这么长的代码了,调BUG还好很快就过了。
1 |
|