CF327E Axis Walking

题目描述

Iahub 想要见到他的女朋友 Iahubina。两人都住在 $Ox$ 轴上(即水平轴)。Iahub 住在 $0$ 点,Iahubina 住在 $d$ 点。 Iahub 有 $n$ 个正整数 $a_{1}$、$a_{2}$、...、$a_{n}$,这些数的和为 $d$。设 $p_{1}$、$p_{2}$、...、$p_{n}$ 是 $1,2,...,n$ 的一个排列。那么定义 $b_{1}=a_{p_1}$,$b_{2}=a_{p_2}$,依此类推。数组 $b$ 被称为一条“路线”。总共存在 $n!$ 条不同的路线,每种对应 $p$ 的一种排列。 Iahub 的行进安排如下:他在 $Ox$ 轴上先行走 $b_{1}$ 步,在 $b_{1}$ 处休息;接着再行走 $b_{2}$ 步,在 $b_{1}+b_{2}$ 处休息;以此类推,第 $j$ 次($1\leq j\leq n$)时,他再前进 $b_{j}$ 步,在位置 $b_{1}+b_{2}+...+b_{j}$ 休息。 Iahub 非常迷信,有 $k$ 个数字会带来霉运。他称某条路线为“好运路线”,如果他从未在这些霉运数对应的位置停留。请你计算他总共有多少种好运路线,答案对 $1000000007$($10^9+7$)取模。

输入格式

第一行包含一个整数 $n$($1\leq n\leq 24$)。 第二行包含 $n$ 个整数 $a_{1},a_{2},...,a_{n}$($1\leq a_{i}\leq 10^{9}$)。 第三行包含一个整数 $k$($0\leq k\leq 2$)。 第四行包含 $k$ 个正整数,表示 Iahub 会觉得霉运的数字。每个数字不超过 $10^{9}$。

输出格式

输出一个整数,表示 Iahub 的疑问的答案,对 $1000000007$ 取模。

说明/提示

在第一个样例中,考虑六种可能的排列方式: - $[2, 3, 5]$。Iahub 会在位置 $2、5、10$ 停留,其中 $5$ 是霉运位置。 - $[2, 5, 3]$。停留在 $2、7、10$,其中 $7$ 是霉运位置。 - $[3, 2, 5]$。会在霉运位置 $5$ 停留。 - $[3, 5, 2]$。这是合法排列。 - $[5, 2, 3]$。遇到两次霉运位置($5$ 和 $7$)。 - $[5, 3, 2]$。会在 $5$ 处停留,Iahub 会拒绝这条路线。 在第二个样例中,可能有两种不同的停留方式但停靠点集合完全相同。实际上,所有六种排列停留点均为 $[2, 4, 6]$,因此对于 Iahub 来说没有霉运路线。 由 ChatGPT 5 翻译