886. 求组合数 II

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了886. 求组合数 II相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
https://www.acwing.com/problem/content/888/
C a b = a ! ( a − b ) !   b ! C_a^b =\\frac{a!}{(a-b)!\\ b!} Cab=(ab)! b!a!

除法取模我们要求逆元将其转换为乘法。本题的mod=1e9+7 是一个质数,故可以用费马小定理来求逆元。
在这里插入图片描述

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long int LL;
const int N=1e5+10,mod=1e9+7;
LL f[N],inf[N];
int n;
LL qmi(LL a,LL b,LL mod)
{
    LL res=1;
    while(b)
    {
        if(b&1) res=res*a%mod;
        a=a*a%mod;
        b=b>>1;
    }
    return res;
}
void init()
{
    f[0]=inf[0]=1;
    for(int i=1;i<=100000;i++)
    {
        f[i]=f[i-1]*i%mod;
        inf[i]=inf[i-1]*qmi(i,mod-2,mod)%mod;
    }
}
int main(void)
{
    cin>>n;
    init();
    while(n--)
    {
        int a,b; cin>>a>>b;
        cout<<f[a]*inf[a-b]%mod*inf[b]%mod<<endl;
    }
    return 0;
}

以上是关于886. 求组合数 II的主要内容,如果未能解决你的问题,请参考以下文章

斯特林数应用

40组合总和II

518-零钱兑换 II(完全背包-求方案总数)

[Leetcode 40]组合数和II Combination Sum II

CF886E 题解

ZZNUOJ_C语言1100:求组合数(函数专题)(完整代码)