传送门
先考虑将数组
a
a
a从小到大排列,对于
a
[
1
∼
n
]
a[1\sim n]
a[1∼n]假设我们选择
x
x
x个数放在
p
p
p序列中,那么不难得到我们必须在
a
[
n
+
1
∼
2
n
]
a[n+1\sim 2n]
a[n+1∼2n]中同样选择
x
x
x个数放在
q
q
q序列中。
对于特定的
p
p
p和
q
q
q而言,我们总是先拿出
p
p
p中最小的一个数与
q
q
q中最大的一个数作差求贡献,然后再拿出
p
p
p中第二小的一个数与
q
q
q中第二大的一个数作差求贡献…以此类推。
由于我们在 a [ 1 ∼ n ] a[1\sim n] a[1∼n]中选择了 x x x个数放在 p p p序列中,它们对应的分别是 a [ n + 1 ∼ 2 n ] a[n+1\sim 2n] a[n+1∼2n]中的 x x x个被选择放在 q q q序列中的数。它们的绝对值差之和恰好为 a [ n + 1 ∼ 2 n ] a[n+1\sim 2n] a[n+1∼2n]中的 x x x个数减去 a [ 1 ∼ n ] a[1\sim n] a[1∼n]中的 x x x个数,而考虑 p p p中最后 n − x n-x n−x个数字一定出现于 a [ n + 1 ∼ 2 n ] a[n+1\sim 2n] a[n+1∼2n],而 q q q中最后 n − x n-x n−x个数字一定出现于 a [ 1 ∼ n ] a[1\sim n] a[1∼n],这样不难发现一个序列的贡献就是 s u m [ n + 1 ∼ 2 n ] − s u m [ 1 ∼ n ] sum[n+1\sim 2n]-sum[1\sim n] sum[n+1∼2n]−sum[1∼n],这是一个常数,而序列的选择方式一共有 ( 2 n n ) \tbinom{2n}{n} (n2n)种,故总贡献是 ( 2 n n ) [ s u m [ n + 1 ∼ 2 n ] − s u m [ 1 ∼ n ] ] \tbinom{2n}n [sum[n+1\sim 2n]-sum[1\sim n]] (n2n)[sum[n+1∼2n]−sum[1∼n]]。
int c[maxn*2];
int main(){
int n=rd(),sum=0;
FOR(i,1,2*n+1)c[i]=rd();
sort(c+1,c+2*n+1);
FOR(i,n+1,2*n+1)sum=(sum+c[i])%mod;
FOR(i,1,n+1)sum=(sum-c[i])%mod;sum=(sum%mod+mod)%mod;
int a=1,b=1;
FOR(i,1,2*n+1)a=1ll*a*i%mod;
FOR(i,1,n+1)b=1ll*b*i%mod;b=1ll*b*b%mod;
sum=1ll*sum*a%mod*qpow(b,mod-2,mod)%mod;
wrn(sum);
}