1 solutions

  • 0
    @ 2026-4-17 16:11:27

    解题思路

    关键知识点:组合数

    从 n 个同学中抽取 k 个同学组成搭档,是一个典型的组合问题。

    组合数公式

    Cnk=n!k!(nk)!C_n^k = \frac{n!}{k!(n-k)!}

    计算方法: 由于 n < 20,结果不会太大,可以直接使用公式计算。

    注意:样例说明中 {3,2} 和 {2,3} 被视为不同的组合,说明题目中 (a,b) 和 (b,a) 是不同的。这实际上应该是排列而非组合。

    重新分析样例:n=4, k=2

    • 可能的组合:12, 13, 14, 23, 24, 34 = 6 种

    这恰好是 Pnk=n!(nk)!P_n^k = \frac{n!}{(n-k)!},即排列数。

    验证:4个同学取2个的排列 = 4 × 3 = 12,但这只有6种,说明 {3,2} 和 {2,3} 是同一组。

    仔细看题目描述:"搭档组合不得重复出现,即每组搭档只能拍一张创意照片",说明 {1,2} 和 {2,1} 是相同的。

    所以答案是 Cnk=n!k!(nk)!C_n^k = \frac{n!}{k!(n-k)!}

    参考代码

    #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