更多PAT甲级题解--acking-you.github.io

题目

OJ平台

题目理解

这又是一场关于题目理解的博弈!!!

关键句意:

where Nc is the number of distinct common numbers shared by the two sets, and Nt is the total number of distinct numbers in the two sets.

翻译:

这里的Nc是两个不含相同数字集合的公共数字的数量,Nt是两个不含相同数字集合的数字总量。

  • 没错,这个题意乍一看根本就翻译不准,得结合题目的示例进行翻译,其实也就是每个集合中不会含有相同的数字,然后Nc是两个集合的交集,Nt是两个集合的总数量。这样一说题目是不是就变得非常简单了。。。

所以很简单的直接用STL解决就行了,直接用unordered_set记录给定的集合数据。

解题代码

这次直接提交了,没啥可说的😂

无序容器这效率也是yyds!C++11的语法有用白不用!!auto&& : set yyds!!

#include <bits/stdc++.h>

using namespace std;
int N, K;

void solve() {
    ios::sync_with_stdio(false);
    cin >> N;
    unordered_set<int> Set[N + 1];
    for (int i = 1; i <= N; i++) {//创建集合
        int m;
        cin >> m;
        while (m--) {
            int d;
            cin >> d;
            Set[i].insert(d);
        }
    }
    cin >> K;
    while (K--) {//打印答案
        int a, b;
        cin >> a >> b;
        int nc = 0, nt = Set[b].size();
        for (auto &&it :Set[a]) {
            if (Set[b].count(it))
                nc++;
            else
                nt++;
        }
        double ans = (double) nc / nt * 100;
        cout << fixed << setprecision(1) << ans << '%' << endl;
    }
}

int main() {
    solve();
    return 0;
}