• 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 均可

  • 相关阅读:
    JS: 子项可以来回交换的两个下拉列表
    DOM事件
    DOM基础2——元素
    DOM基础1
    JS: 随机点名程序与万年历
    G_S男女匹配算法(算法的第一个程序2016.09.19)
    Java IO流详尽解析(大神之作)
    细讲解JAVA中的IO流
    c++运算符的优先级(收好不谢)
    java程序——输出当月日历表
  • 原文地址:https://www.cnblogs.com/ecustlegendn324/p/13913037.html
Copyright © 2020-2023  润新知