题目名称 4198. [CSP-S 2025 T3]谐音转换(民间数据)
输入输出 replace.in/out
难度等级 ★★★★
时间限制 1000 ms (1 s)
内存限制 2000 MiB
测试数据 20
题目来源 Gravatarsyzhaoss 于2025-11-01加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:0, 提交:2, 通过率:0%
Gravatar金牌教师王艳芳 45 22.582 s 18.10 MiB C++
Gravatar金牌教师王艳芳 30 4.853 s 18.79 MiB C++
关于 谐音转换(民间数据) 的近10条评论(全部评论)

4198. [CSP-S 2025 T3]谐音转换(民间数据)

★★★★   输入文件:replace.in   输出文件:replace.out   简单对比
时间限制:1 s   内存限制:2000 MiB

【题目描述】

小 W 是一名喜欢语言学的算法竞赛选手。在语言学中,谐音替换是指将原有的字词替换为读音相同或相近的字词。小 W 发现,谐音替换的过程可以用字符串来进行描述。具体地,小 W 将谐音替换定义为以下字符串问题:

给定 $n$ 个字符串二元组,第 $i$ ($1 \leq i \leq n$) 个字符串二元组为 $(s_{i,1}, s_{i,2})$,满足 $|s_{i,1}| = |s_{i,2}|$,其中 $|s|$ 表示字符串 $s$ 的长度。

对于字符串 $s$,定义 $s$ 的替换如下:

对于 $s$ 的某个子串 $y$,若存在 $1 \leq i \leq n$ 满足 $y = s_{i,1}$,则将 $y$ 替换为 $y' = s_{i,2}$。具体地,设 $s = x + y + z$,其中 $x$ 和 $z$ 可以为空,“+” 表示字符串拼接,则 $s$ 的替换将得到字符串 $s' = x + y' + z$。

小 W 提出了 $q$ 个问题,第 $j$ ($1 \leq j \leq q$) 个问题会给定两个不同的字符串 $t_{j,1}, t_{j,2}$,她想知道有多少种字符串 $t_{j,1}$ 的替换能够得到字符串 $t_{j,2}$。两种 $s$ 的替换不同当且仅当子串 $y$ 的位置不同或用于替换的二元组 $(s_{i,1}, s_{i,2})$ 不同,即 $x, z$ 不同或 $i$ 不同。你需要回答小 W 提出的所有问题。

【输入格式】

输入的第一行包含两个正整数 $n, q$,分别表示字符串二元组的数量和小 W 提出的问题的数量。

输入的第 $i+1$ ($1 \leq i \leq n$) 行包含两个字符串 $s_{i,1}, s_{i,2}$,表示第 $i$ 个字符串二元组。

输入的第 $j+n+1$ ($1 \leq j \leq q$) 行包含两个字符串 $t_{j,1}, t_{j,2}$,表示小 W 提出的第 $j$ 个问题。

【输出格式】

输出 $q$ 行,其中第 $j$ ($1 \leq j \leq q$) 行包含一个非负整数,表示替换后得到字符串 $t_{j,2}$ 的字符串 $t_{j,1}$ 的替换的数量。

【样例1输入】

4 2
xabcx xadex
ab cd
bc de
aa bb
xabcx xadex
aaaa bbbb

【样例1输出】

2
0

【样例1说明】

对于小 W 的第一个询问,共有 $2$ 种 $t_{1,1}$ 的替换能够得到 $t_{1,2}$:

1. 令 $x, z$ 均为空串,$y = \mathtt{xabcx}$, $i = 1$,则 $y' = \mathtt{xadex}$,替换后得到 $\mathtt{xadex}$;

2. 令 $x = \mathtt{xa}$, $y = \mathtt{bc}$, $z = \mathtt{x}$, $i = 3$,则 $y' = \mathtt{de}$,替换后得到 $\mathtt{xadex}$。

【样例2输入】

3 4
a b
b c
c d
aa bb
aa b
a c
b a

【样例2输出】

0
0
0
0

【样例3,4】

样例下载

样例3满足测试点 11, 12 的约束条件。

样例4满足测试点 15, 16 的约束条件。

【数据规模与约定】

设 $L_1 = \sum_{i=1}^{n} |s_{i,1}| + |s_{i,2}|$, $L_2 = \sum_{j=1}^{q} |t_{j,1}| + |t_{j,2}|$。对于所有测试数据,保证:

$1 \leq n, q \leq 2 \times 10^5$;

$2 \leq L_1, L_2 \leq 5 \times 10^6$;

对于所有 $1 \leq i \leq n$, $s_{i,1}, s_{i,2}$ 均仅包含小写英文字母,且 $|s_{i,1}| = |s_{i,2}|$;

对于所有 $1 \leq j \leq q$, $t_{j,1}, t_{j,2}$ 均仅包含小写英文字母,且 $t_{j,1} \neq t_{j,2}$。

特殊性质 A:$q = 1$。

特殊性质 B:定义字符串 $s$ 为特别的,当且仅当字符串 $s$ 仅包含字符 $a$ 和 $b$,且字符 $b$ 在 $s$ 中出现恰好一次。对于所有 $1 \leq i \leq n$, $s_{i,1}, s_{i,2}$ 均为特别的,且对于所有 $1 \leq j \leq q$, $t_{j,1}, t_{j,2}$ 均为特别的。