#CF2127F. Hamed 和 AghaBalaSar
Hamed 和 AghaBalaSar
时间限制: 每个测试 秒
内存限制: 每个测试 MB
Hamid 为 a+b 问题写了 行代码,并把其中 行给了 Hamed;于是 Hamed 想到了下面的问题。
给定两个整数 和 。
一个数组 被称为 蛇形数组,当且仅当以下所有条件成立:
- 中的所有元素都是介于 和 之间的整数;
- ;
- 。
定义 如下面的伪代码所示:
function f(array a):
pos := 1
res := 0
设 nxt[x] 为一个数组,满足 nxt[x] 是使得 y > x 且 a[y] > a[x] 的最小下标 y,
若不存在这样的 y 则为 undefined
while pos < n:
if a[pos] < a[n]:
res += a[nxt[pos]] - a[pos]
pos := nxt[pos]
else:
pos += 1
return res
求所有蛇形数组 的 之和,结果对 取模。
输入
每个测试包含多个测试用例。第一行包含测试用例数 ()。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 和 (,)—— 蛇形数组的长度以及所有元素之和。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一个整数 —— 所有蛇形数组的 之和,对 取模。
样例输入
8
2 5
3 4
4 6
5 10
6 23
100 100
142857 33333
200000 0
样例输出
9
14
76
985
142112
771227753
865580631
0
提示
在第一个测试用例中,共有三个蛇形数组:
- ;
- ;
- 。
因此答案为 。
在第二个测试用例中,共有六个蛇形数组:
- ;
- ;
- ;
- ;
- ;
- 。
因此答案为 。
在第五个测试用例中,一个可能的蛇形数组为:
- 。