题库练习 基因序列

A71993 | 基因序列

来源编程题
时间限制1s
内存限制512MB
通过 / 提交0/0

题目描述

在生物信息学研究中,研究员常需要比较两段基因序列的相似度。现有两段由核苷酸编号组成的序列 AB,长度分别为 NM。序列中的每个元素都是一个 [1, 10^5] 之间的整数。

在比对过程中,研究员会从序列 A 中选出一个子序列 A',再从序列 B 中选出一个子序列 B'

如果子序列 A' 与子序列 B' 完全相同(即长度相同且对应位置的元素相等),则称其为一对“匹配子序列对”。

需要注意的是:

  1. 下标敏感:即使两个子序列所含的元素数值序列相同,只要选取的元素在原序列中的下标集合不同,就视为不同的子序列。
  2. 空序列:根据研究定义,从 AB 中均不选取任何元素所构成的空序列对,也算作一对匹配子序列对。
  3. 子序列:从原序列中选择若干元素(可以不选),在不改变它们相对前后顺序的前提下,提取出来所组成的新序列。

请你编写程序,计算两段序列中共有多少对不同的“匹配子序列对”。由于答案可能很大,请输出对 10^9 + 7 取模后的结果。

输入格式

第一行包含两个整数 NM,分别表示序列 AB 的长度。

第二行包含 N 个整数,表示序列 A 的各个元素。

第三行包含 M 个整数,表示序列 B 的各个元素。

输出格式

输出一个整数,表示匹配子序列对的总数对 10^9 + 7 取模后的结果。

输入输出样例

输入 #1
2 2
1 3
3 1
输出 #1
3
输入 #2
2 2
1 1
1 1
输出 #2
6
输入 #3
4 4
3 4 5 6
3 4 5 6
输出 #3
16
C++ 编辑器
输入
输出