zoukankan      html  css  js  c++  java
  • C(n, m)模板

    #include <bits/stdc++.h>
    #define mp make_pair
    #define pb push_back
    
    using namespace std;
    
    typedef pair<int, int> pii;
    typedef long long ll;
    typedef unsigned long long ull;
    
    const double eps = 1e-7;
    const double pi = acos(-1.0);
    const int inf = 0x3f3f3f3f;
    
    inline ll read() {
        ll f = 1, x = 0;
        char c = getchar();
        while(c < '0' || c > '9') {
            if(c == '-') f = -1;
            c = getchar();
        } 
        while(c >= '0' && c <= '9') {
            x = (x << 1) + (x << 3) + (c ^ 48);
            c = getchar();
        }
        return f * x;
    }
    
    const int mod = 1e9 + 7;
    const int N = 2e6 + 10;
    
    ll fac[N], inv[N];
    
    ll qpow(ll a, int n) {
        ll ans = 1;
        while(n) {
            if(n & 1)   ans = (ans * a) % mod;
            a = (a * a) % mod;
            n >>= 1;
        }
        return ans;
    }
    
    ll C(int n, int m) {
        if(n < 0 || m < 0 || m > n) return 0;
        if(m == 0 || m == n)    return 1;
        return ((fac[n] * inv[m]) % mod * inv[n - m]) % mod;
    }
    
    void init() {
        fac[0] = 1;
        for(int i = 1; i < N; i++)
            fac[i] = (fac[i - 1] * i) % mod;
        inv[N - 1] = qpow(fac[N - 1], mod - 2);
        for(int i = N - 2; i >= 0; i--)
            inv[i] = (inv[i + 1] * (i + 1)) % mod;
    }
    
    
    int main() {
        // freopen("in.txt", "r", stdin);
        // freopen("out.txt", "w", stdout);
        // ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
        init();
        while(true) {
            int n = read(), m = read();
            printf("%lld", C(n, m));
        }
        return 0;
    }
    
  • 相关阅读:
    蛋疼的时候写三消游戏(十一) 圆形时钟
    C# 中的volatile关键字 (我今天才知道)
    第十四周助教总结
    第十周助教总结
    第十二周助教总结
    C语言I博客作业04
    C语言I博客作业05
    C语言I博客作业02
    第十一周助教总结
    第十三周助教总结
  • 原文地址:https://www.cnblogs.com/lifehappy/p/13138232.html
Copyright © 2011-2022 走看看