[bzoj4517][SDOI2016]排列计数
2017-01-24 17:56
507 查看
题目大意
计算C(n,m) * D(n-m)
其中D(x)为错位排列
题目解答
没有什么好说的,注意细节。
代码
#include <bits/stdc++.h> const int P = 1e9+7; const int maxn = 1e7+1; #define ll long long int D[maxn+10], fact[maxn+10]; int pow(int x, int y) { int ans = 1; while(y) { if(y & 1) ans = (ll) ans * x % P; x = (ll) x * x % P; y >>= 1; } return ans; } int inv(int n) { return pow(n, P-2); } int C(int n, int m) { return (ll)fact * inv(fact[n-m]) % P * (ll) inv(fact[m]) % P; } int main() { D[0] = D[2] = 1; for(int i = 3; i < maxn; i++) D[i] = (ll)(i-1)*(D[i-1]+D[i-2])%P; fact[0]= 1; for(int i = 1; i < maxn; i++) fact[i] = (ll)fact[i-1]*i%P; int T; scanf("%d", &T); while(T--) { int n, m; scanf("%d %d", &n, &m); printf("%lld\n", (ll)D[n-m] * C(n, m) % P); } return 0; }
相关文章推荐
- bzoj4517: [Sdoi2016]排列计数
- BZOJ4517: [Sdoi2016]排列计数
- [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]排列计数(错排+组合数)