#D. 分裂

    Type: Default File IO: split 3000ms 512MiB

分裂

You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.

分裂(split\texttt{split}

【题目描述】

小 D 在初学 C++ 的时候写了如下代码:

int split(vector <int> p) {
    if(p.empty()) return 0;
    int n=p.size();
    vector <int> l,r;
    for(int i=1;i<n;++i) {
        if(p[i]<p[0]) l.push_back(p[i]);
        else r.push_back(p[i]);
    }
    return n+split(l)+split(r);
}

他想知道有多少个 1n1\sim n 的排列 pp,使得 pp 作为该函数的输入,得到的返回值 m\le m,他只关心答案对 109+710^9+7 取模后的结果。

【输入格式】

split.in\texttt{split.in} 中读入数据。

一行两个整数 n,mn,m

【输出格式】

输出到 split.out\texttt{split.out} 中。

一行一个整数表示满足条件的排列数对 109+710^9+7 取模后的结果。

【样例 1 输入】

4 9

【样例 1 输出】

16

【样例 2 输入】

15 77

【样例 2 输出】

228312362

【样例 3 输入】

40 998244353

【样例 3 输出】

799434881

【样例 4 输入】

119 721

【样例 4 输出】

94362767

【样例 5 输入】

107 3321

【样例 5 输出】

590250400

【数据范围】

对于所有的测试数据有:1n128,1m1091\le n\le 128,1\le m\le 10^9

子任务编号 分值 特殊限制
11 1010 n8n\le 8
22 2020 n20n\le 20
33 3030 m800m\le 800
44 4040 无特殊限制

NOIP2024 模拟赛(四)hard

Not Attended
Status
Done
Rule
OI
Problem
4
Start at
2024-8-10 7:50
End at
2024-8-10 12:05
Duration
4.3 hour(s)
Host
Partic.
32