测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A6966. 公共子序列对

编程题 普及/提高-

题目描述

小明有两个整数序列,分别是长度为 $N$ 的序列 $S$ 和长度为 $M$ 的序列 $T$。序列中的元素均为 $1$ 到 $10^5$ 之间的整数。

小明想知道,有多少对 $(s', t')$ 满足以下条件:

1. $s'$ 是 $S$ 的一个子序列。
2. $t'$ 是 $T$ 的一个子序列。
3. $s'$ 和 $t'$ 的内容完全相同(即长度相等,且对应位置的元素值相等)。

**注意:**

- 子序列是指从原序列中删除 $0$ 个或多个元素,保留剩余元素相对顺序组成的新序列。
- 在本题中,即使两个子序列的内容完全相同,但如果它们是由原序列中**不同下标**的元素组成的,也被视为不同的子序列。例如,对于 $S = (1, 1)$,取第一个 $1$ 和取第二个 $1$ 形成的子序列内容都是 $(1)$,但它们被视为两个不同的子序列。
- 空序列也是一种合法的子序列。

由于答案可能非常大,请输出答案对 $10^9 + 7$ 取模后的结果。

输入格式

第一行包含两个整数 $N$ 和 $M$,分别表示序列 $S$ 和序列 $T$ 的长度。

第二行包含 $N$ 个整数 $S_1, S_2, \dots, S_N$,表示序列 $S$ 的元素。

第三行包含 $M$ 个整数 $T_1, T_2, \dots, T_M$,表示序列 $T$ 的元素。

输出格式

输出一个整数,表示满足条件的子序列对 $(s', t')$ 的数量,结果对 $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
输入 #4
10 9
9 6 5 7 5 9 8 5 6 7
8 6 8 5 5 7 9 9 7
输出 #4
191
输入 #5
20 20
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
输出 #5
846527861

说明/提示

## 说明/提示

### 数据范围

- 对于 $100\%$ 的数据:$1 \le N, M \le 2000$,$1 \le S_i, T_i \le 10^5$。
- 输入保证所有数值均为整数。

### 样例 1 解释

- $S$ 的子序列有:$(), (1), (3), (1, 3)$。
- $T$ 的子序列有:$(), (3), (1), (3, 1)$。
- 内容相同的配对有:
1. 均为空序列 $()$:1 种。
2. 内容为 $(1)$:$S$ 取 $1$,$T$ 取 $1$,共 $1 \times 1 = 1$ 种。
3. 内容为 $(3)$:$S$ 取 $3$,$T$ 取 $3$,共 $1 \times 1 = 1$ 种。
- 总计 $1 + 1 + 1 = 3$ 种。

### 样例 2 解释

- $S$ 的子序列:$(), (1)_{idx=1}, (1)_{idx=2}, (1, 1)$。
- $T$ 的子序列:$(), (1)_{idx=1}, (1)_{idx=2}, (1, 1)$。
- 匹配情况:
- 空序列:1 种。
- 内容 $(1)$:$S$ 有 2 个 $(1)$,$T$ 有 2 个 $(1)$,共 $2 \times 2 = 4$ 种。
- 内容 $(1, 1)$:$S$ 有 1 个,$T$ 有 1 个,共 $1 \times 1 = 1$ 种。
- 总计 $1 + 4 + 1 = 6$ 种。
上一题 去做题 下一题