#P13206. [GCJ 2016 Finals] Integeregex
[GCJ 2016 Finals] Integeregex
Description
在本题中,一个合法的正则表达式是下列之一。描述中的 等表示(不一定不同的)合法正则表达式。
- 一个十进制数字:即 $\mathbf{0}\ \mathbf{1}\ \mathbf{2}\ \mathbf{3}\ \mathbf{4}\ \mathbf{5}\ \mathbf{6}\ \mathbf{7}\ \mathbf{8}\ \mathbf{9}$ 之一。
- 连接:。
- 并选:,其中至少有两个表达式。注意外层括号是必须的。
- 重复:。注意外层括号是必须的。
例如,, , , , , , , 都是合法表达式。, , , , 都不是。
我们说表达式 匹配数字字符串 当且仅当下列之一成立:
- 。
- ,且存在 使得 且 匹配 。
- ,且至少有一个 匹配 。
- ,且存在若干非负整数 及 ,使得 且 匹配每个 。特别地, 匹配空串。
例如,表达式 匹配 等字符串,但不匹配 等。
给定一个合法的正则表达式 ,问有多少个整数在 间,其十进制表示(无前导零)能被 匹配?
Input Format
输入的第一行包含一个整数 ,表示测试用例数量。接下来有 组测试用例,每组包含两行。第一行为两个正整数 和 ,表示所关心的整数区间(闭区间)。第二行为一个仅由 0123456789()|* 组成的字符串 ,保证其为合法正则表达式(如上所述)。
Output Format
对于每组测试用例,输出一行 Case #x: y,其中 为测试用例编号(从 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)*)
Case #1: 4
Case #2: 1
Case #3: 5
Case #4: 0
Case #5: 4
Case #6: 2
Case #7: 1000000000000000000
Case #8: 6
Hint
样例解释
注意,样例 5 至 8 不会出现在小数据集中。
在样例 1 中,区间内匹配的数字为 。
在样例 2 中,区间内匹配的数字为 。
在样例 3 中,区间内匹配的数字为 。
在样例 4 中,没有匹配的数字。
在样例 5 中,区间内匹配的数字为 。
在样例 6 中,区间内匹配的数字为 。
在样例 7 中,区间内的任意数字都能被匹配。
在样例 8 中,区间内匹配的数字为 。
限制条件
- 。
- $1 \leqslant \mathbf{A} \leqslant \mathbf{B} \leqslant 10^{18}$。
- 的长度 。
小数据集(15 分,测试集 1 - 可见)
- 不包含 | 字符。
大数据集(15 分,测试集 2 - 隐藏)
- 无其他限制。
翻译由 GPT4.1 完成。
京公网安备 11011102002149号