QOJ.ac

QOJ

Time Limit: 10 s Memory Limit: 1024 MB Total points: 30

#6008. 整数正则表达式

Statistics

在本题中,有效的正则表达式定义如下。在以下描述中,$E_1, E_2$ 等表示(不一定不同)有效的正则表达式。

  • 十进制数字:即 $0, 1, 2, 3, 4, 5, 6, 7, 8, 9$ 中的一个。
  • 连接:$E_1E_2$。
  • 析取:$(E_1|E_2|\dots|E_N)$,至少包含两个表达式。注意外层括号是必须的。
  • 重复:$(E_1)^*$。注意外层括号是必须的。

例如,$7, 23, (7)^*, (45)^*, (1|2|3), ((2)^*|3), (1|2|3)$ 和 $((0|1))^*$ 都是有效的表达式。而 $(7), 4|5, 4^*, (1|)$ 和 $(0|1)^*$ 则不是。

我们称一个表达式 $E$ 匹配一个数字字符串 $D$,当且仅当以下至少一条成立:

  • $E = D$。
  • $E = E_1E_2$,且存在 $D_1$ 和 $D_2$ 使得 $D = D_1D_2$,且 $E_1$ 匹配 $D_1$,$E_2$ 匹配 $D_2$。
  • $E = (E_1|E_2|\dots|E_N)$,且至少有一个 $E_i$ 匹配 $D$。
  • $E = (E_1)^*$,且存在某个非负整数 $N$,以及 $D_1, D_2, \dots, D_N$,使得 $D = D_1D_2\dots D_N$,且 $E_1$ 匹配每一个 $D_i$。特别地,注意 $(E_1)^*$ 匹配空字符串。

例如,表达式 $((1|2))^*3$ 匹配 $3, 13, 123$ 和 $2221123$ 等字符串。然而,它不匹配 $1234, 3123, 12$ 或 $33$ 等字符串。

给定一个有效的正则表达式 $R$,请问在 $A$ 到 $B$(包含 $A$ 和 $B$)之间,有多少个整数的十进制表示(无前导零)能被 $R$ 匹配?

输入格式

输入的第一行包含测试用例的数量 $T$。接下来有 $T$ 个测试用例;每个测试用例包含两行。第一行包含两个正整数 $A$ 和 $B$:我们感兴趣的整数范围的闭区间。第二行包含一个字符串 $R$,仅由字符 $0123456789()|*$ 组成,保证其为上述定义中的有效正则表达式。

输出格式

对于每个测试用例,输出一行 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是在闭区间 $[A, B]$ 中能被正则表达式 $R$ 匹配的整数个数。

数据范围

$1 \le T \le 100$。 $1 \le A \le B \le 10^{18}$。 $1 \le \text{length of } R \le 30$。

小数据范围(测试集 1 - 可见)

$R$ 不包含 | 字符。

大数据范围(测试集 2 - 隐藏)

无额外限制。

样例

样例输入 1

8
1 1000
(0)*1(0)*
379009 379009
379009
1 10000
(12)*(34)*
4 5
45
1 100
((0|1))*
1 50
(01|23|45|67|23)
1 1000000000000000000
((0|1|2|3|4|5|6|7|8|9))*
1 1000
1(56|(((7|8))*9)*)

样例输出 1

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

说明

注意样例 5 到 8 不会出现在小数据范围中。

在样例 1 中,匹配范围内的数字为 1, 10, 100 和 1000。 在样例 2 中,匹配范围内的数字为 379009。 在样例 3 中,匹配范围内的数字为 12, 34, 1212, 1234 和 3434。 在样例 4 中,范围内没有匹配的数字。 在样例 5 中,匹配范围内的数字为 1, 10, 11 和 100。 在样例 6 中,匹配范围内的数字为 23 和 45。 在样例 7 中,可以形成范围内的任意数字。 在样例 8 中,匹配范围内的数字为 1, 19, 156, 179, 189 和 199。

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.