#P16422. pm3050Square Language

pm3050Square Language

题目背景

语言研究员正在研究一种结构非常规整的人工语言。

这种语言中的每个单词都由四段组成:若干个字符 a、若干个字符 b、若干个字符 c,以及若干个字符 d。每一段的长度都必须位于指定的范围内。

现在,研究员会从词库中任意选择两个单词,并按照先后顺序将它们拼接成一个新单词。不同的选择方式可能得到完全相同的字符串,因此研究员关心的不是选择方式的数量,而是最终能够得到多少种不同的字符串。

题目描述

SS 是一个由互不相同的字符串组成的集合。

定义集合 S2S^2 为:

S2={xyxS, yS},S^2=\{xy\mid x\in S,\ y\in S\},

其中 xyxy 表示将字符串 xx 和字符串 yy 按顺序拼接得到的字符串。集合中相同的字符串只计算一次。

集合 SS 定义如下:

$$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\}.$$

这里,aia^i 表示字符 a 连续出现 ii 次。字符 bcd 的定义类似。

例如:

a3b2c0d1=aaabbd.a^3b^2c^0d^1=\texttt{aaabbd}.

当指数为 00 时,对应部分为空串。例如,a0a^0 表示空串。

请计算集合 S2S^2 中不同字符串的数量。

注意:即使两组不同的 (x,y)(x,y) 得到了同一个拼接结果,这个字符串在 S2S^2 中也只计算一次。

输入格式

输入共四行。

第一行包含两个整数 la,ual_a,u_a,表示字符 a 的出现次数范围。

第二行包含两个整数 lb,ubl_b,u_b,表示字符 b 的出现次数范围。

第三行包含两个整数 lc,ucl_c,u_c,表示字符 c 的出现次数范围。

第四行包含两个整数 ld,udl_d,u_d,表示字符 d 的出现次数范围。

输出格式

输出一个整数,表示集合 S2S^2 中不同字符串的数量。

数据范围

对于所有输入数据:

0laua100,0\le l_a\le u_a\le 100, 0lbub100,0\le l_b\le u_b\le 100, 0lcuc100,0\le l_c\le u_c\le 100, 0ldud100.0\le l_d\le u_d\le 100.

答案保证可以使用 6464 位有符号整数存储。

样例 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

解释

此时 SS 中只有空串。将两个空串拼接后仍然是空串,因此 S2S^2 中只有一种字符串。

样例 7

输入

0 1
0 0
0 0
0 0

输出

3

解释

此时:

S={ε,a},S=\{\varepsilon,\texttt{a}\},

其中 ε\varepsilon 表示空串。

可以得到的不同字符串为:

空串
a
aa

因此答案为 33

样例 8

输入

0 1
0 1
0 0
0 0

输出

12

解释

此时:

$$S=\{\varepsilon,\texttt{a},\texttt{b},\texttt{ab}\}.$$

集合 S2S^2 中的 1212 个不同字符串为:

空串
a
b
aa
ab
ba
bb
aab
aba
abb
bab
abab

样例 9

输入

0 100
0 0
0 0
0 0

输出

201

解释

每个字符串都只由字符 a 组成。

拼接后字符 a 的总数可以是 00200200 之间的任意整数,因此共有:

2000+1=201200-0+1=201

种不同字符串。

样例 10

输入

1 100
10 90
20 80
30 70

输出

410390615610000

解释

在这一组数据中,不同的两个原字符串拼接方案不会产生重复的结果。