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 有梯度。

来源/分类