AcWing 230. 排列计数 水题(组合数+错排)打卡

Posted lis-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 230. 排列计数 水题(组合数+错排)打卡相关的知识,希望对你有一定的参考价值。

题目:https://www.acwing.com/problem/content/232/

#include<bits/stdc++.h>
#define ll long long
#define mod 1000000007
using namespace std;
const int maxn = 1000005;
ll dp[maxn],inv[maxn],fac[maxn],inv_fac[maxn];
void init()

    inv[0]=inv[1]=inv_fac[0]=fac[0]=1;
    dp[1]=0;dp[2]=1;
    for(int i=2; i<maxn; i++) inv[i]=inv[mod%i]*(mod-mod/i)%mod;
    for(int i=1; i<maxn; i++) fac[i]=fac[i-1]*i%mod;
    for(int i=1; i<maxn; i++) inv_fac[i]=inv_fac[i-1]*inv[i]%mod;
    for(int i=3; i<maxn; i++) dp[i]=(i-1)*(dp[i-2]+dp[i-1])%mod;

ll C(int n,int m)

    return fac[n]*inv_fac[m]%mod*inv_fac[n-m]%mod;

int main()

    init();
    ll n,m,t;
    scanf("%lld",&t);
    while(t--)
        scanf("%lld%lld",&n,&m);
        if(n==m) printf("1\n");
        else printf("%lld\n",(C(n,m)*dp[n-m])%mod);
    

 

以上是关于AcWing 230. 排列计数 水题(组合数+错排)打卡的主要内容,如果未能解决你的问题,请参考以下文章

Acwing第 31 场周赛完结

Acwing第 32 场周赛完结

Acwing第 18 场周赛完结

Acwing第 33 场周赛完结

AcWing842 排列数字

AcWing 842. 排列数字(DFS)