P4071 [SDOI2016]排列计数 题解
生活随笔
收集整理的這篇文章主要介紹了
P4071 [SDOI2016]排列计数 题解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分析:
線性求逆元:https://blog.csdn.net/qq_34564984/article/details/52292502
代碼:
#include<cstdio>
using namespace std;
const long long mod=1000000007;
long long ni[1000005],cheng[1000005],dao[1000005],d[1000005];
int main()
{
d[0]=1;
d[1]=0;
d[2]=1;
for(long long i=3;i<=1000000;i++)
{
d[i]=((i-1)*(d[i-1]+d[i-2]))%mod;
}//錯排遞推公式!!!
ni[1]=1;//1的逆元為1
for(long long i=2;i<=1000000;i++)
{
ni[i]=(mod-mod/i)*ni[mod%i]%mod;
}//求出i的逆元(線性求逆元板子
cheng[0]=1;
for(long long i=1;i<=1000000;i++)
{
cheng[i]=(cheng[i-1]*i)%mod;
} //求出i的正常階乘
dao[0]=1;
for(long long i=1;i<=1000000;i++)
{
dao[i]=(dao[i-1]*ni[i])%mod;
}
long long T;
scanf("%lld",&T);
while(T--)
{
long long n,m;
scanf("%lld%lld",&n,&m);
printf("%lld\n",(cheng[n]%mod*dao[m]%mod*dao[n-m]%mod*d[n-m]%mod)%mod);
}
return 0;
}
總結
以上是生活随笔為你收集整理的P4071 [SDOI2016]排列计数 题解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows中检查端口占用
- 下一篇: 网页不能显示PNG验证码的解决办法