对不起我硕哥
思路全对,就是个组合数的事情
减操作取模记得+mod!!!
1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 const int maxn = 1e6 + 10;
6 const ll mod = 998244353;
7 ll f[maxn];
8 ll inv[maxn];//逆元
9 ll finv[maxn];//逆元阶乘
10
11 void pre()
12 {
13 f[0] = f[1] = 1;
14 inv[0] = inv[1] = 1;
15 finv[0] = finv[1] = 1;//记得初始化
16 for(ll i = 2 ; i < maxn ; i++){
17 f[i] = f[i - 1] * i % mod;
18 inv[i] = (mod - mod / i) % mod * inv[mod % i] % mod;//线性求逆元
19 }
20 for(ll i = 2 ; i < maxn ; i++){
21 finv[i] = finv[i - 1] * inv[i] % mod;//逆元阶乘
22 }
23 }
24
25 ll comb(ll n, ll m)
26 {
27 if(m == 0 || n < m || m == n) return 1;
28 ll tmp = f[n] * finv[n - m] % mod * finv[m] % mod;//此处分母为逆元阶乘
29 return tmp % mod;
30 }
31
32 ll a[maxn];
33
34 int main(){
35 int n;scanf("%d",&n);
36 pre();
37 for(int i = 1 ; i <= n * 2 ; i++){
38 scanf("%lld",&a[i]);
39 }
40 sort(a + 1, a + n * 2 + 1);
41
42 ll sum = 0;
43 for(int i = 2 * n ; i > n ; i--){
44 sum += a[i];
45 sum -= a[i - n];
46 sum %= mod;
47 }
48 sum = sum * comb(n * 2, n) % mod;
49
50 printf("%lld
",sum % mod);
51
52 return 0;
53 }
44 - 46行这样写 或者 sum = (sum - a[i - n] + mod) % mod 均可