​LINK​

把长度 2 ∗ n 2*n 2∗n的 a a a数组分成两个长度 n n n的数组 p p p和 q q q

对 p p p递增排序,对 q q q递减排序,计算 f ( p , q ) = ∑ i = 1 n ∣ p i − q i ∣ f(p,q)=\sum\limits_{i=1}^n |p_i-q_i| f(p,q)=i=1∑n​∣pi​−qi​∣

求对于任意的 p , q p,q p,q,他们的 f ( p , q ) f(p,q) f(p,q)之和。



没啥好说的,结论题,想不出又不会猜.

结论:无论那种划分得到的 p , q p,q p,q, f ( p , q ) f(p,q) f(p,q)的值都是较大的那 n n n个数减较小的那 n n n个数

因为 f ( p , q ) = ∑ i = 1 n max ⁡ ( p i , q i ) −   m i n ( p i , q i ) f(p,q)=\sum\limits_{i=1}^n \max(p_i,q_i)-\ min(p_i,q_i) f(p,q)=i=1∑n​max(pi​,qi​)− min(pi​,qi​)

设较大的那 n n n个数集合为 A A A,较小的那 n n n个数集合为 B B B

我们断言 p i , q i p_i,q_i pi​,qi​分别来自于 A , B A,B A,B

考虑反证法,若 p i , q i p_i,q_i pi​,qi​同时属于 A A A(随便做的假设,你也可以假设来自B)

那么必然存在另一对 p j , q j p_j,q_j pj​,qj​同时属于 B B B

这样 p p p数组和 q q q数组的单调性是一样的,而题目中明确说了 p p p递增, q q q递减

所以 f ( p , q ) f(p,q) f(p,q)是定值,分割数组 a a a的方案显然是 ( 2 n n ) \binom {2n}{n} (n2n​)

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
const int maxn = 1e6+10;
int n,a[maxn],fac[maxn];
int quick(int x,int n)
{
int ans = 1;
for( ; n ; n>>=1,x=x*x%mod )
if( n&1 ) ans = ans*x%mod;
return ans;
}
int C(int n,int m)
{
if( n<m ) return 0ll;
return fac[n]*quick( fac[m]*fac[n-m]%mod,mod-2 )%mod;
}
signed main()
{
fac[0] = 1;
for(int i=1;i<=1000000;i++) fac[i] = fac[i-1]*i%mod;
cin >> n;
for(int i=1;i<=2*n;i++) cin >> a[i];
sort( a+1,a+1+2*n );
int ans = 0;
for(int i=1;i<=n;i++) ans = ( ans-a[i]+a[i+n] )%mod;
cout << ( ans*C( 2*n,n )%mod+mod )%mod << endl;
}