#P14805. [CCPC 2024 哈尔滨站] 弹珠赛跑

[CCPC 2024 哈尔滨站] 弹珠赛跑

题目描述

弹珠赛跑是一种非常有趣的玩弹珠的方式,你今天也想尝试一下。

xx 轴负半轴有 nn 个起跑点位,第 ii 个点位的坐标为 xix_i。总共有 mm 个弹珠,其中 mm 是奇数,第 ii 个弹珠的移动速度为 viv_i。在一场比赛中,每一个弹珠都会等概率地随机选择一个起跑点位,不同的弹珠可以选到相同的点位。比赛开始时,所有弹珠同时出发,向 xx 正半轴方向一直移动。令 cic_i 为第 ii 个弹珠选择的起跑点位编号,不难得出在时间为 tt 时第 ii 个弹珠的坐标为 xci+vi⋅tx_{c_i} + v_i \cdot t。

你是个独特的弹珠爱好者,并不在乎哪个弹珠最快。你只想知道这 mm 个弹珠的所有坐标的中位数恰好在原点(即 x=0x = 0)的时间点。一个长度为奇数 mm 的序列的中位数是从小到大排序后下标为 m+12\frac{m+1}{2} 的数(下标从 11 开始)。由于赛跑还没开始,弹珠的起跑点位还没有确定,所以你想知道这个答案的数学期望。为了避免实数误差,你只需要输出这个答案在 109+710^9+7 模意义下的结果(详情见输出格式)。

输入格式

第一行两个正整数 nn 和 mm (1≤n,m≤5001 \le n, m \le 500,且 mm 为奇数),表示起跑点位个数和弹珠的个数。

第二行 nn 个整数 x1,x2,…,xnx_1, x_2, \ldots, x_n (−109≤xi<0-10^9 \le x_i < 0),表示每个起跑点位的坐标。保证所有 xix_i 互不相同。

第三行 mm 个整数 v1,v2,…,vmv_1, v_2, \ldots, v_m (1≤vi≤1091 \le v_i \le 10^9),表示每个弹珠的移动速度。

输出格式

输出一行一个整数,表示答案的数学期望对 109+710^9+7 取模后的结果。

令 M=109+7M=10^9+7。可以证明,答案能够表示为最简分数 pq\frac p q,其中 pp 和 qq 是正整数且 q≢0(modM)q \not\equiv 0\pmod M。则你需要输出 p⋅q−1(modM)p\cdot q^{-1}\pmod M,q−1q^{-1} 表示 qq 在模 MM 意义下的乘法逆元。换句话说,输出满足 0≤x<M0\le x < M 且 x⋅q≡p(modM)x\cdot q\equiv p\pmod M 的整数 xx。可以证明,符合条件的 xx 是唯一的。

2 3
-4 -5
1 2 3
250000004
3 3
-4 -5 -6
1 2 3
500000006
5 5
-4 -5 -6 -10 -2
1 2 3 2 4
434986672

提示

对于第一个样例,三个弹珠的速度分别为 1,2,31, 2, 3,考虑三个弹珠分别的初始坐标:

  • −4,−4,−4-4, -4, -4:t=2t=2 的时候,三个弹珠的坐标分别为 −2,0,2-2, 0, 2,中位数恰好在原点。
  • −4,−4,−5-4, -4, -5:t=2t=2 的时候,三个弹珠的坐标分别为 −2,0,1-2, 0, 1,中位数恰好在原点。
  • −4,−5,−4-4, -5, -4:t=2.5t=2.5 的时候,三个弹珠的坐标分别为 −1.5,0,3.5-1.5, 0, 3.5,中位数恰好在原点。
  • (−4,−5,−5)(-4, -5, -5), (−5,−4,−4)(-5, -4, -4), (−5,−4,−5)(-5, -4, -5), (−5,−5,−4)(-5, -5, -4), (−5,−5,−5)(-5, -5, -5) 的时候同理,中位数恰好在原点的时间分别为 t=2.5t=2.5, t=2t=2, t=2t=2, t=2.5t=2.5, t=2.5t=2.5。

综上,期望时间为 $\frac{2 + 2 + 2.5 + 2.5 + 2 + 2 + 2.5 + 2.5}{8} = \frac{9}{4}$,因此你需要输出 9⋅4−1 mod (109+7)=2500000049 \cdot 4^{-1} \bmod (10^9+7) = 250000004。