QOJ.ac

QOJ

حد الوقت: 1 s حد الذاكرة: 512 MB مجموع النقاط: 100

#3365. Soundex

الإحصائيات

Soundex 是一种将字符串转换为代码的语音算法,代码始终由一个字母后跟三个数字组成。其目的是将拼写不同但发音相似的字符串转换为相同的代码。转换规则如下:

  • 字符串的第一个字母即为代码的第一个字母。
  • 随后的辅音字母替换为数字:
    • b, f, p, v 替换为 1
    • c, g, j, k, q, s, x, z 替换为 2
    • d, t 替换为 3
    • l 替换为 4
    • m, n 替换为 5
    • r 替换为 6 h 和 w 被忽略。元音字母 a, e, i, o, u 和 y 不进行编码。
  • 两个或多个相邻且对应相同数字的字母被替换为一个数字。两个或多个对应相同数字的字母如果被 h 或 w 分隔,也会被替换为一个数字。如果两个对应相同数字的字母被元音分隔,则该数字会出现两次。
  • 重复上述步骤,直到无法再将重复的数字合并为一个数字。
  • 如果生成的代码不足 3 位数字,则在末尾补零,直到代码达到 3 位数字。如果超过 3 位数字,则舍弃最右侧的数字。

一些转换示例如下:

  • robert 和 rupert 都转换为 R163。
  • baawwwww 转换为 B000。
  • hopp 转换为 H100。字符串的第一个字母始终成为代码的第一个字母,即使它是元音、h 或 w。
  • ratatata 转换为 R333,因为每对 t (3) 之间的元音强制该数字重复。
  • yhhhwthwhtwhthwhwth 转换为 X300。所有 h 和 w 均被忽略,代码中仅保留一个 3。
  • bbpb 转换为 B100。第一个 b 与后三个 b 分开。剩余的 b 是连续的,被替换为一个数字。

你的邪恶朋友 Halvor 注意到许多不同的单词会产生相同的 Soundex 代码。例如,字符串 rhhhbm、rubeno、rpowam、robnew 以及其他 73908 个长度为 6 或更短的字符串都会被转换为代码 R150。这让他非常好奇,他想知道有多少个长度为 $L$ 或更短的字符串会被转换为相同的 Soundex 代码。当然,他希望你编写一个计算机程序来完成这项任务。你的朋友不关心大小写,因此 AA、Aa、aa 等被视为相同的字符串,且只能计数一次。

输入格式

输入的第一行包含一个整数 $T$,表示测试用例的数量。每个测试用例以一行开始,包含一个字符串 $S$ 和一个整数 $L$。$S$ 表示一个 Soundex 代码,由一个大写字母后跟三个数字组成。$L$ 表示转换为给定 Soundex 代码的原始字符串的最大长度。

输出格式

对于每个测试用例,输出一行,包含一个数字,表示长度为 $L$ 或更短且具有 Soundex 代码 $S$ 的字符串数量。该数字可能很大,请输出其对 $1,000,000,007$ 取模的结果。

数据范围

  • $0 < T \le 100$
  • $0 < L \le 1000$
  • 所有 Soundex 代码均以大写字母开头。
  • 如果两个字符串 $S$ 和 $T$ 长度相同,且对应位置的字母相同(不区分大小写),则它们相等。
  • 仅考虑 a 到 z 之间的字母。不使用 æ, ø, å 或其他非英文字符。
  • Soundex 代码始终合法。即非零数字永远不会跟在零数字后面,且数字范围为 0 到 6。

样例

输入格式 1

3
A300 2
R150 6
X123 1

输出格式 1

2
73912
0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.