A94826.公共子序列对

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

小明有两个整数序列,分别是长度为 NN 的序列 SS 和长度为 MM 的序列 TT。序列中的元素均为 1110510^5 之间的整数。

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

  1. ss'SS 的一个子序列。
  2. tt'TT 的一个子序列。
  3. ss'tt' 的内容完全相同(即长度相等,且对应位置的元素值相等)。

注意:

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

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

输入格式

第一行包含两个整数 NNMM,分别表示序列 SS 和序列 TT 的长度。

第二行包含 NN 个整数 S1,S2,,SNS_1, S_2, \dots, S_N,表示序列 SS 的元素。

第三行包含 MM 个整数 T1,T2,,TMT_1, T_2, \dots, T_M,表示序列 TT 的元素。

输出格式

输出一个整数,表示满足条件的子序列对 (s,t)(s', t') 的数量,结果对 109+710^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%100\% 的数据:1N,M20001 \le N, M \le 20001Si,Ti1051 \le S_i, T_i \le 10^5
  • 输入保证所有数值均为整数。

样例 1 解释

  • SS 的子序列有:(),(1),(3),(1,3)(), (1), (3), (1, 3)
  • TT 的子序列有:(),(3),(1),(3,1)(), (3), (1), (3, 1)
  • 内容相同的配对有:
    1. 均为空序列 ()():1 种。
    2. 内容为 (1)(1)SS11TT11,共 1×1=11 \times 1 = 1 种。
    3. 内容为 (3)(3)SS33TT33,共 1×1=11 \times 1 = 1 种。
  • 总计 1+1+1=31 + 1 + 1 = 3 种。

样例 2 解释

  • SS 的子序列:(),(1)idx=1,(1)idx=2,(1,1)(), (1)_{idx=1}, (1)_{idx=2}, (1, 1)
  • TT 的子序列:(),(1)idx=1,(1)idx=2,(1,1)(), (1)_{idx=1}, (1)_{idx=2}, (1, 1)
  • 匹配情况:
    • 空序列:1 种。
    • 内容 (1)(1)SS 有 2 个 (1)(1)TT 有 2 个 (1)(1),共 2×2=42 \times 2 = 4 种。
    • 内容 (1,1)(1, 1)SS 有 1 个,TT 有 1 个,共 1×1=11 \times 1 = 1 种。
  • 总计 1+4+1=61 + 4 + 1 = 6 种。
首页