题库练习 Fuzzy Concatenation (Hard version)
← 上一题 下一题 →

A16709 | Fuzzy Concatenation (Hard version)

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

这是这个问题的难度较高的版本。不同之处在于本版本中 $n \le 5 \cdot 10^{5}, m \le 5 \cdot 10^{4}$。只有在你解决了所有版本的问题后,才能进行 hack。

现在有两个字符串 $s$ 和 $t$,它们都只包含小写拉丁字母。同时你还有一个空字符串 $p$。

你可以进行如下操作,每次操作包括几个阶段:

- 任选两个整数 $l$ 和 $r$($1 \le l \le r \le |s|$);
- 取出子串 $s_l,\ldots, s_r$,并将其添加到字符串 $p$ 的末尾;
- 在 $p$ 的最后 $r - l + 1$ 个字符中,至多可以将其中的一个字符改成任意的小写拉丁字母。

例如,如果字符串 $s = $ "dhhtyhwbsl",$p = $ "",你可以选择 $l = 3, r = 6$,把 "htyh" 添加到 $p$ 的末尾,然后把字符 "y" 改成 "a",这样 $p$ 就变成了 "htah"。

你的任务是确定使得字符串 $p$ 恰好等于 $t$ 所需的最少操作次数。

输入格式

每个测试点包含多组测试用例。第一行包含测试用例数量 $t$($1 \le t \le 10^4$)。接下来是每组测试用例的描述。

每组测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 5 \cdot 10^{5}, 1 \le m \le 5 \cdot 10^{4}$)——字符串 $s$ 和 $t$ 的长度。

接下来一行给出长度为 $n$ 的字符串 $s$,仅包含小写字母。

再下一行给出长度为 $m$ 的字符串 $t$,也只包含小写字母。

保证所有测试用例中 $n$ 的总和不超过 $5 \cdot 10^{5}$,$m$ 的总和不超过 $5 \cdot 10^{4}$。

输出格式

对于每个测试用例,输出一个整数,表示最少操作次数。

输入输出样例

输入 #1
4
1 1
a
b
5 5
aaaaa
abzba
10 13
dhhtyhwbsl
htahbsehtyhzb
7 2
contest
on
输出 #1
1
3
3
1
C++ 编辑器
输入
输出