#P16422. pm3050Square Language
pm3050Square Language
题目背景
语言研究员正在研究一种结构非常规整的人工语言。
这种语言中的每个单词都由四段组成:若干个字符 a、若干个字符 b、若干个字符 c,以及若干个字符 d。每一段的长度都必须位于指定的范围内。
现在,研究员会从词库中任意选择两个单词,并按照先后顺序将它们拼接成一个新单词。不同的选择方式可能得到完全相同的字符串,因此研究员关心的不是选择方式的数量,而是最终能够得到多少种不同的字符串。
题目描述
设 是一个由互不相同的字符串组成的集合。
定义集合 为:
其中 表示将字符串 和字符串 按顺序拼接得到的字符串。集合中相同的字符串只计算一次。
集合 定义如下:
$$S= \left\{ a^i b^j c^k d^m \ \middle|\ \begin{aligned} &l_a\le i\le u_a,\\ &l_b\le j\le u_b,\\ &l_c\le k\le u_c,\\ &l_d\le m\le u_d \end{aligned} \right\}.$$这里, 表示字符 a 连续出现 次。字符 b、c、d 的定义类似。
例如:
当指数为 时,对应部分为空串。例如, 表示空串。
请计算集合 中不同字符串的数量。
注意:即使两组不同的 得到了同一个拼接结果,这个字符串在 中也只计算一次。
输入格式
输入共四行。
第一行包含两个整数 ,表示字符 a 的出现次数范围。
第二行包含两个整数 ,表示字符 b 的出现次数范围。
第三行包含两个整数 ,表示字符 c 的出现次数范围。
第四行包含两个整数 ,表示字符 d 的出现次数范围。
输出格式
输出一个整数,表示集合 中不同字符串的数量。
数据范围
对于所有输入数据:
答案保证可以使用 位有符号整数存储。
样例 1
输入
0 100
0 100
0 100
0 100
输出
10828525844240801
样例 2
输入
0 10
0 10
0 10
0 10
输出
213826481
样例 3
输入
1 10
1 10
1 10
1 10
输出
100000000
样例 4
输入
0 2
0 2
0 2
0 2
输出
6129
样例 5
输入
0 1
0 1
0 1
0 1
输出
224
样例 6
输入
0 0
0 0
0 0
0 0
输出
1
解释
此时 中只有空串。将两个空串拼接后仍然是空串,因此 中只有一种字符串。
样例 7
输入
0 1
0 0
0 0
0 0
输出
3
解释
此时:
其中 表示空串。
可以得到的不同字符串为:
空串
a
aa
因此答案为 。
样例 8
输入
0 1
0 1
0 0
0 0
输出
12
解释
此时:
$$S=\{\varepsilon,\texttt{a},\texttt{b},\texttt{ab}\}.$$集合 中的 个不同字符串为:
空串
a
b
aa
ab
ba
bb
aab
aba
abb
bab
abab
样例 9
输入
0 100
0 0
0 0
0 0
输出
201
解释
每个字符串都只由字符 a 组成。
拼接后字符 a 的总数可以是 到 之间的任意整数,因此共有:
种不同字符串。
样例 10
输入
1 100
10 90
20 80
30 70
输出
410390615610000
解释
在这一组数据中,不同的两个原字符串拼接方案不会产生重复的结果。