CF 1444B

对不起我硕哥

思路全对,就是个组合数的事情

减操作取模记得+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 均可

原文地址:https://www.cnblogs.com/ecustlegendn324/p/13913037.html