CF2127F.Hamed and AghaBalaSar

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Hamid 为 a+b 问题写了 30143014 行代码,并将其中 1010 行给了 Hamed;然后 Hamed 想到了如下问题。

给定两个整数 nn 和 mm。

一个数组 a1,a2,…,ana_1,a_2,\ldots,a_n 被称为“snake 数组”,当且仅当满足以下所有条件:

  • 数组 aa 的所有元素都是 00 到 mm 之间的整数;
  • a1+a2+⋯+an=ma_1 + a_2 + \cdots + a_n = m;
  • an=max⁡([a1,a2,…,an])a_n = \max\left([a_1, a_2, \ldots, a_n]\right)。

我们定义 f(a)f(a),其伪代码如下:

function f(array a):
    pos := 1
    res := 0
    令数组 nxt 使得 nxt[x] 是最小的下标 y 满足 y > x 且 a[y] > a[x],不存在则未定义。
    while pos < n:
        if a[pos] < a[n]:
            res += a[nxt[pos]] - a[pos]
            pos := nxt[pos]
        else:
            pos += 1
    return res

请计算所有 snake 数组 a1,a2,…,ana_1,a_2,\ldots,a_n 的 f(a)f(a) 之和,结果对 109+710^9+7 取模。

输入格式

每组测试数据包含多个测试用例。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 nn 和 mm(2≤n≤2⋅1052 \leq n \leq 2 \cdot 10^5,0≤m≤2⋅1050 \leq m \leq 2 \cdot 10^5)—— snake 数组的长度和所有元素之和。

保证所有测试用例中 mm 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例,输出一个整数,表示所有 snake 数组 a1,a2,…,ana_1,a_2,\ldots,a_n 的 f(a)f(a) 之和,对 109+710^9+7 取模。

输入输出样例

  • 输入#1

    8
    2 5
    3 4
    4 6
    5 10
    6 23
    100 100
    142857 33333
    200000 0

    输出#1

    9
    14
    76
    985
    142112
    771227753
    865580631
    0

说明/提示

在第一个测试用例中,有三个 snake 数组:

  • f([0,5])=5f([0, 5]) = 5;
  • f([1,4])=3f([1, 4]) = 3;
  • f([2,3])=1f([2, 3]) = 1。

因此,答案为 5+3+1=95+3+1=9。

在第二个测试用例中,有六个 snake 数组:

  • f([0,0,4])=4f([0, 0, 4]) = 4;
  • f([0,1,3])=3f([0, 1, 3]) = 3;
  • f([1,0,3])=2f([1, 0, 3]) = 2;
  • f([1,1,2])=1f([1, 1, 2]) = 1;
  • f([0,2,2])=2f([0, 2, 2]) = 2;
  • f([2,0,2])=2f([2, 0, 2]) = 2。

因此,答案为 4+3+2+1+2+2=144+3+2+1+2+2=14。

在第五个测试用例中,一个可能的 snake 数组为:

  • f([3,1,4,1,5,9])=6f([3, 1, 4, 1, 5, 9]) = 6。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页