bzoj4517: [Sdoi2016]排列计数
2017-09-03 19:20
435 查看
f
=(f[n-1]*f[n-2])(i-1);
ans=c(n,m)*f[n-m].
=(f[n-1]*f[n-2])(i-1);
ans=c(n,m)*f[n-m].
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int read() { char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar(); while(ch>='0'&&ch<='9') {f=f*10+(ch^48);ch=getchar();} return f; } long long f[1000005],p[1000005]; const int mod=1000000007; long long ksm(long long x,int y) { long long ret=1; while(y) { if(y&1) { ret=(ret*x)%mod; } y>>=1; x=(x*x)%mod; } return ret; } long long c(int n,int m) { return ((1ll*p *ksm(p[m],mod-2)%mod)*ksm(p[n-m],mod-2))%mod; } int main() { int T=read(); f[0]=1,f[2]=1;p[1]=1;p[2]=2;p[0]=1; for(int i=3;i<=1000000;i++) { f[i]=(1LL*(i-1)*(f[i-1]+f[i-2]))%mod; p[i]=(1LL*p[i-1]*i)%mod; } while(T--) { int n=read(),m=read(); //cout<<f[n-m]<<" "; if(m>n) puts("0"); else printf("%d\n",(1LL*c(n,m)*f[n-m])%mod); //cout<<c(n,m); } }
相关文章推荐
- BZOJ4517 [Sdoi2016][排列计数]
- 【BZOJ4517】【Sdoi2016】排列计数 线性逆元 错位排列
- [bzoj4517][Sdoi2016]排列计数(组合数学)
- 【bzoj4517】 Sdoi2016—排列计数
- bzoj4517: [Sdoi2016]排列计数
- [BZOJ4517][SDOI2016]排列计数(错位排列)
- BZOJ4517 [Sdoi2016]排列计数 【组合数 + dp】
- bzoj4517 [Sdoi2016]排列计数
- BZOJ4517 [Sdoi2016]排列计数
- [bzoj4517][Sdoi2016]排列计数
- Bzoj4517 [Sdoi2016]排列计数
- BZOJ4517: [Sdoi2016]排列计数
- bzoj4517: [Sdoi2016]排列计数
- [bzoj4517][SDOI2016]排列计数
- bzoj4517 [Sdoi2016]排列计数 (错排 + 组合数)
- [BZOJ4517][SDOI2016]排列计数(排列组合)
- 【bzoj4517】【SDOI2016】排列计数
- 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排
- BZOJ4517: [Sdoi2016]排列计数
- bzoj4517: [Sdoi2016]排列计数