1 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define int long long signed main() { ios::sync_with_stdio(false); cin.tie(0); int type, n, m, p; cin >> type >> n >> m >> p; //n个位置放m个东西,共有n-m个空格 //假定m个东西位置不变,需要再填进去(m-1)个空格,剩下n-m-(m-1) = n-2m+1个空格可以自由填入 //包括最左和最右,共有m+1个位置可以填入剩下的空格 //所以最终是n-2m+1个空格放到m+1个位置,允许位置为空 int a = n - 2 * m + 1; int b = m + 1; //a个物体放到b个箱子中,相当于a+b-1个位置中挑b-1个地方当隔断 //所以是个组合数,从x个东西中挑选y个东西 int x = a + b - 1; int y = b - 1; //现在是x个元素挑y个 = x! / y! / (x - y)! //换算成n和m是(n - m + 1)! / m! / (n - 2m + 1) //但是最终还要乘上m!区分花 //所以最终是(n-m+1)! / (n-2m+1)! int ans = 1; for (int i = (n - 2 * m + 2); i <= (n - m + 1); i++){ ans = (ans * i) % p; } cout << ans; return 0; }
- 1
信息
- ID
- 87
- 时间
- 1000ms
- 内存
- 500MiB
- 难度
- 8
- 标签
- 递交数
- 70
- 已通过
- 11
- 上传者