全部评论 3

  • 其实不用这么麻烦

    #include <iostream>
    #include <vector>
    #include <unordered_map>
    using namespace std;
    int main() {
        int N;
        cin >> N;
        vector<int> A(N);
        for (int i = 0; i < N; ++i) {
            cin >> A[i];
        }
        unordered_map<int, int> count;
        for (int i = 0; i < N; ++i) {
            count[A[i]]++;
        }
        long long total_triples = 0;
        long long total_singles = 0;
        long long total_pairs = 0;
        for (const auto& pair : count) {
            total_triples += total_pairs * pair.second;
            total_pairs += total_singles * pair.second;
            total_singles += pair.second;
        }
        cout << total_triples << endl;
        return 0;
    }
    

    2024-07-16 来自 广东

    0
    • 解释一下呗

      2024-07-17 来自 广东

      0
    • 假设有
      𝑁
      N 个元素,且每个元素各不相同,那么满足题目要求的三元组数量就是这
      𝑁
      N 个元素中任意取
      3
      3 个元素的组合。也就是
      (
      𝑛
      3
      )

      𝑛
      ×
      (
      𝑛

      1
      )
      ×
      (
      𝑛

      2
      )
      /
      1
      (
      3
      n

      )=n×(n−1)×(n−2)/1​。

      如果有重复的元素呢?我们只需要把重复的元素再“去除”掉就行。

      2024-07-17 来自 广东

      0
    • tim老师没跟你讲吗

      2024-07-17 来自 广东

      0
  • 自己想
    提示:可以把总共的组合数减去至少两个相同的组合数

    2024-07-16 来自 广东

    0
  • e

    2024-07-16 来自 广东

    0

热门讨论