全部评论 7

  • jjngnknjyhkmjjjjjhjhlgjikiukuhkjnjhjjn

    4天前 来自 浙江

    0
  • yehhgjhlhojliu

    4天前 来自 浙江

    0
  • yrtt

    4天前 来自 浙江

    0
  • trtu

    4天前 来自 浙江

    0
  • jhky5yliuyu

    4天前 来自 浙江

    0
  • 嘻嘻

    4天前 来自 浙江

    0
  • #include <bits/stdc++.h>
    using namespace std;

    #define Int register int
    #define MAXX 20000005
    #define mod 998244353
    #define Gi 332748118
    #define MAXN 800005
    #define G 3

    int quick_pow (int a,int b,int c){
    int res = 1;
    while (b){
    if (b & 1) res = 1ll * res * a % c;
    a = 1ll * a * a % c;
    b >>= 1;
    }
    return res;
    }

    int l,limit,r[MAXN];

    void NTT (int *a,int type){
    for (Int i = 0;i < limit;++ i)
    if (i < r[i]) swap (a[i],a[r[i]]);
    for (Int mid = 1;mid < limit;mid <<= 1){
    int Wn = quick_pow (type == 1 ? G : Gi,(mod - 1) / (mid << 1),mod);
    for (Int R = mid << 1,j = 0;j < limit;j += R){
    int w = 1;
    for (Int k = 0;k < mid;++ k,w = 1ll * w * Wn % mod){
    int x = a[j + k],y = 1ll * w * a[j + k + mid] % mod;
    a[j + k] = (x + y) % mod,a[j + k + mid] = (x + mod - y) % mod;
    }
    }
    }
    if (type == 1) return ;
    int Inv = quick_pow (limit,mod - 2,mod);
    for (Int i = 0;i < limit;++ i) a[i] = 1ll * a[i] * Inv % mod;
    }

    template <typename T> inline void read (T &t){t = 0;char c = getchar();int f = 1;while (c < '0' || c > '9'){if (c == '-') f = -f;c = getchar();}while (c >= '0' && c <= '9'){t = (t << 3) + (t << 1) + c - '0';c = getchar();} t *= f;}
    template <typename T,typename ... Args> inline void read (T &t,Args&... args){read (t);read (args...);}
    template <typename T> inline void write (T x){if (x < 0){x = -x;putchar ('-');}if (x > 9) write (x / 10);putchar (x % 10 + '0');}

    int N,M,S,L;
    int A[MAXN],B[MAXN];

    int inv[MAXX],fac[MAXX];

    void SiteLin (int n){
    for (Int i = 0;i <= n;++ i){
    A[i] = (i & 1) ? mod - inv[i] : inv[i];
    B[i] = 1ll * quick_pow (i,n,mod) * inv[i] % mod;
    }
    limit = 1,l = 0;
    while (limit <= (n << 1)) limit <<= 1,l ;
    for (Int i = 0;i < limit;
    i) r[i] = (r[i >> 1] >> 1) | ((i & 1) << l - 1);
    NTT (A,1),NTT (B,1);
    for (Int i = 0;i < limit;++ i) A[i] = 1ll * A[i] * B[i] % mod;
    NTT (A,-1);
    }

    int C (int n,int m){
    return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
    }

    signed main(){
    read (N,M,S,L);
    inv[0] = inv[1] = fac[0

    4天前 来自 浙江

    0

热门讨论