string

来源:互联网 发布:卡盟网络 编辑:程序博客网 时间:2024/06/17 16:16

题目大意:
给出一个长度为n, 由小写英文字母组成的字符串S, 求在所有由小写英文字母组成且长度为n 且恰好有k 位与S 不同的字符串中,给定字符串T 按照字典序排在第几位。由于答案可能很大,模10^9 + 7 输出。

Input

第一行为两个整数n; k
第二行一个字符串S
第三行一个字符串T,(T即是k位与S不同的串)

Output

输出一行取模后的答案。

Sample Input

4 1
abcd
bbcd

Sample Output

76

Data Constraint

对于前30% 的数据,n<=5
对于100% 的数据,k<=n<=10^5

分析:
Subtask2: n ≤ 105
考虑由所有与 S 有 k 处不同的字符串组成的一棵 T rie, 只需要在 T rie 上走出 T 这个串,
然后统计每一步排在它之前的子树大小之和就可以了。
k 记录后 n − i + 1 位还需要与 S 不同的位数。对于第 i 位,前 i − 1 位与 T 相同,第 i
位是 c < T[i] 且 c ̸= S[i] 的字符串共有 (
n−i
k−1
)
· (|Σ| − 1)k−1 个,第 i 位是 c = S[i] 且 c < T[i]
的字符串共有 (
n−i
k
)
· (|Σ| − 1)k 个。若 S[i] ̸= T[i], 就将 k 减去 1,一直计算到字符串结束就可
以了。
复杂度 O(n)

0 0
原创粉丝点击