#P16883. [GKS 2022 #D] Touchbar Typing

    ID: 19211 远端评测题 3000ms 1024MiB 尝试: 0 已通过: 0 难度: 5 上传者: 标签>动态规划 DP2022线性 DPGoogle Kick Start

[GKS 2022 #D] Touchbar Typing

题目描述

Crowdsource 应用中的滑动输入任务使用了一种新的 Google 键盘,通过在不抬起手指的情况下在按键上滑动来输入单词,如下面的动画所示。

:::align{center} :::

为了使滑动输入任务更具挑战性,我们使用的不是普通键盘,而是一个特殊的线性键盘 KK,所有按键排成一行。

假设你想输入一个长度为 NN 的单词 SS。线性键盘 KKMM 个按键。保证键盘上的按键覆盖了 SS 中的所有字符。但是,有些按键可能是重复的。换句话说,对于 SS 中的每个字符,在 KK 中存在一个或多个按键映射到该字符。注意,所有字符和按键都用整数表示。

你可以将手指放在任意一个按键上开始。将手指从一个按键移动到相邻按键需要 11 秒。由于是滑动输入,不需要按动按键。如果手指当前位于索引 ii 的按键(该按键字符为 KiK_i),并且我们想输入字符 KjK_j(即索引 jj 处的字符),我们将手指从按键 ii 滑动到按键 jj,这需要 ji|j - i| 秒。如果你的手指在按键 xx 上,你可以瞬间多次输入字符 KxK_x。你需要逐个字符地输入字符串 SS。形式化地说,对于每个 1iN11 \le i \le N-1,你必须在输入 Si+1S_{i+1} 之前先输入 SiS_i

例如,假设单词 SS 的字符为:1,2,2,3,41, 2, 2, 3, 4。你可以先让手指放在键盘上字符为 11 的按键(位于索引 ii)上。然后,将手指滑动到字符为 22 的按键(位于索引 jj)上。这将花费 ji|j - i| 秒。为了在字符串 SS 中连续输入两个 22,你可以不花额外时间完成,因为 jj=0|j - j| = 0 秒。然后你可以继续滑动手指以顺序输入单词 SS 中的其余字符。

请计算出输入该单词所需的最小时间。

输入格式

输入的第一行给出测试用例的数量 TT。接下来有 TT 个测试用例。

每个测试用例的第一行包含一个整数 NN:单词 SS 的长度。

每个测试用例的第二行包含 NN 个整数:其中 SiS_i 表示第 ii 个位置上的字符。

每个测试用例的第三行包含一个整数 MM:键盘 KK 的长度。

每个测试用例的第四行包含 MM 个整数:其中 KiK_i 表示第 ii 个按键上的字符。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是在键盘 KK 上输入 SS 所需的最小时间。

2
5
1 2 3 2 1
3
1 2 3
3
1 1 1
2
2 1
Case #1: 4
Case #2: 0
2
4
2 1 4 1
8
4 1 5 2 1 3 5 4
3
1 2 3
8
2 3 5 1 4 6 7 2
Case #1: 4
Case #2: 4

提示

在样例 #1 中,我们可以按照以下步骤以最短时间输入字符串 SS

  • 将手指放在字符为 11 的按键 K1K_1 上。现在我们已经输入了字符串 SS 的第一个字符。
  • 为了输入字符串 SS 的第二个字符 22,将手指滑动到按键 K2K_2。从索引 11 滑动到索引 22 需要额外 21=1|2 - 1| = 1 秒。
  • 为了输入字符串 SS 的第三个字符 33,将手指滑动到按键 K3K_3。从索引 22 滑动到索引 33 需要额外 32=1|3 - 2| = 1 秒。
  • 为了输入字符串 SS 的第四个字符 22,将手指滑动到按键 K2K_2。从索引 33 滑动到索引 22 需要额外 23=1|2 - 3| = 1 秒。
  • 为了输入字符串 SS 的第五个字符 11,将手指滑动到按键 K1K_1。从索引 22 滑动到索引 11 需要额外 12=1|1 - 2| = 1 秒。
  • 我们总共用了 44 秒输入完字符串 SS 的所有字符。

在样例 #2 中,我们可以按照以下步骤以最短时间输入字符串 SS

  • 将手指放在字符为 11 的按键 K2K_2 上。现在我们已经输入了字符串 SS 的第一个字符。
  • 由于手指在按键 K2K_2 上,我们可以无额外时间地多次输入字符 11。因此,我们可以输入字符串 SS 的第二和第三个字符。
  • 我们总共用了 00 秒输入完字符串 SS 的所有字符。

限制条件

1T1001 \le T \le 100

SS 中的每个字符至少出现在 KK 中一次。

1Ki25001 \le K_i \le 2500

1Si25001 \le S_i \le 2500

测试集 1

1N1001 \le N \le 100

1M1001 \le M \le 100

保证键盘 KK 中没有重复的按键。

测试集 2

1N1001 \le N \le 100

1M1001 \le M \le 100

测试集 3

1N25001 \le N \le 2500

1M25001 \le M \le 2500

翻译由 DeepSeek V4 Pro 完成