3689: 打拳(第三轮03)
内存限制:256 MB
时间限制:1.000 S
评测方式:文本比较
命题人:
提交:4
解决:1
题目描述
著名拳击擂台“瓣瓣”的拳击比赛开赛啦,今天有一场一共 2n 个选手参加的拳击 比赛。根据实力的强弱,我们将所有选手的实力用一个 1 到 2n 的排列表示,
刚刚开始学习打拳的新拳师“布呗之路”也参与了这场比赛,由于他的实力和“瓣瓣” 擂台中的其他拳师根本不在一个水平线上,所以认为他的实力比所有人都弱,即 他的实力为 1。
比赛的规则是这样的:
首先生成一个 1 到 2n 的排列表示, 然后进行 n 轮淘汰赛, 每轮淘汰赛中, 相 邻的两个选手进行比赛,然后决出胜者晋级到下一轮中,。直到最终决出冠军。 例如当 n = 2 时,共有 4 名选手,第一轮是第一名和第二名选手进行打拳, 第三名和第四名进行打拳。第二轮,由两组的胜者再进行打拳,决出冠军。
在正常情况下, 实力强的选手可以打败实力弱的选手,但“布呗之路”买通了比赛 的举办方以及 m 个选手,使得自己可以在赛前安排初始的排列顺序, 以及,让 那些被买通的选手败于自己。
由于这样太过明显,于是“布呗之路”决定,让自己战胜的选手实力尽量地递增, 这样就能让比赛看起来没有那么假。确切的来说,“布呗之路”希望自己依次战胜 的选手实力所构成序列的最长上升子序列长度 ≥ k。
现在,“布呗之路”希望得知,他有多少种合法的安排,能使自己达成目标。
输入
第一行输入四个正整数 n, m, k, mod,其中 n, m, k 的含义如题所述, mod 是你要 在输出的时候对 mod 取模,保证 mod 是一个质数。
第二行给出m个互不相同的数字,表示能买通的选手的实力。
输出
输出一个整数表示答案模 mod 的结果。
样例输入 复制
2 2 2 998244353
3 4
样例输出 复制
8
提示
【样例 1 输入】
2 2 2 998244353
3 4
【样例 1 输出】
8
【样例 1 说明】
一共有 8 种情况,分别是 {1,3,2,4}, {1,3,4,2}, {3,1,2,4}, {3,1,4,2}, {2,4,1,3}, {4,2,1,3}, {2,4,3,1}, {4,2,3,1}。
【数据范围】
对于 20% 的数据: n ≤ 3。
对于另 30% 的数据: n ≤ 9, k = 1。
对于 100% 的数据: n ≤ 9,1 ≤ m ≤ 16,1 ≤ k ≤ n, 10^8 ≤ mod ≤ 10^9 + 7,数据 中的 k 有梯度。