1 solutions
-
0
解题思路
关键知识点:组合数
从 n 个同学中抽取 k 个同学组成搭档,是一个典型的组合问题。
组合数公式:
计算方法: 由于 n < 20,结果不会太大,可以直接使用公式计算。
注意:样例说明中 {3,2} 和 {2,3} 被视为不同的组合,说明题目中 (a,b) 和 (b,a) 是不同的。这实际上应该是排列而非组合。
重新分析样例:n=4, k=2
- 可能的组合:12, 13, 14, 23, 24, 34 = 6 种
这恰好是 ,即排列数。
验证:4个同学取2个的排列 = 4 × 3 = 12,但这只有6种,说明 {3,2} 和 {2,3} 是同一组。
仔细看题目描述:"搭档组合不得重复出现,即每组搭档只能拍一张创意照片",说明 {1,2} 和 {2,1} 是相同的。
所以答案是
参考代码
#include <bits/stdc++.h> using namespace std; int main() { int n, k; cin >> n >> k; long long result = 1; for (int i = 0; i < k; i++) { result = result * (n - i) / (i + 1); } cout << result << endl; return 0; }代码解释
使用组合数的递推性质:
- C(n, k) = C(n, k-1) × (n - k + 1) / k
或者直接计算:
- result = n × (n-1) × ... × (n-k+1) / k!
复杂度分析
- 时间复杂度:O(k)
- 空间复杂度:O(1)
Information
- ID
- 504
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 4
- Accepted
- 1
- Uploaded By