首页 > 试题广场 >

随风飘

[编程题]随风飘
小A和小萌玩游戏。
小A手里有N个纸条,每个纸条上写着一句话,这句话用字符串加密了。。。
由于天气等不可控原因,小A的纸条随风飘走了k个。
无奈,小A和小萌只好在剩下的纸条中选择了。
小A和小萌每个人随机拿一个纸条,每个人都将纸条写成金字塔的模样。
例如:
小A拿到了abcd,他会写成:
              a
         a        b
    a        b        c
a       b        c        d
小萌拿到了abc,他会写成
         a
    a        b
a       b        c
发现到第四层两个金字塔就不一样了,所以这两个的纸条的贡献就是3.
现在小A和小萌玩的没意思了,但是他们还是很想知道对于所有的情况,纸条的贡献之和是多少。
不同的情况代表任何一步的操作不同。
答案对1000000007取模。

输入描述:
第一行两个整数N和Q。

接下来N行,每行一个字符串S。

接下来Q行,每行一个k,表示吹走了k个。


输出描述:
Q行,表示答案。
示例1

输入

4 2
abcd
abc
ab
a
2
1

输出

10
20

说明

保证输入字符均为小写字母。

备注:
N<=4000,Q<=200,|S|<=3000000,k<=300.

本题已于下方时间节点更新,请注意题解时效性:
1. 2025-07-03 更新数据,原数据集存在非法字符,已删除。
头像 shyyhs
发表于 2020-08-01 22:35:30
是一个组合数学问题,朴素的对于每个都不取k,那就是两个for的事.但是对于取k,我们应该如何分析呢?总的是n,我们拿走k个.在拿走的过程中,我们考虑始终保留两个特殊的,假设说我不存在取的过程,那么这两个产生的贡献必定是一次lcp.但是我们考虑拿走,这个它会多几次呢?其实也挺显然的,C(n-2,k)考 展开全文