P4071 (递推+计数)
题目大意:
给定两个数
题目分析:
对于一个长度为
那么我们考虑对于其他
- [
]:数 放在了 的位置上 那么 的位置确定了,可知 - [
]:数 未放在 的位置上,那么 一定不能放在 的位置,可知
仔细思考一下,对于
根据乘法原理可知
显而易见最后答案为:
代码实现:
我们可以先预处理出
注意
对于
点击查看代码
#include<bits/stdc++.h> #define int long long using namespace std; const int mod = 1e9 + 7; const int M = 1e6 + 7; int jc[M] , inv[M] , f[M]; int Pow(int a , int b) { int ans = 1; while(b) { if(b & 1) ans = ans * a % mod; a =a * a % mod; b >>= 1; } return ans; } signed main () { ios::sync_with_stdio(0),cin.tie(0); int t; cin >> t; jc[0] = 1 , jc[1] = 1; inv[0] = 1; for(int i = 1; i <= 1e6; ++ i) { jc[i] = jc[i - 1] * i % mod; inv[i] = Pow(jc[i] , mod - 2); } f[0] = 1 ,f[1] = 0 , f[2] = 1; for(int i = 3; i <= 1e6; ++ i) f[i] = (i - 1) * (f[i - 1] + f[i - 2]) % mod; while(t --) { int n , m; cin >> n >> m; cout << (((jc[n] * inv[m] % mod)* inv[n - m] % mod) * f[n - m] % mod) << '\n'; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通