更多PAT甲级题解--acking-you.github.io
题目
题目理解
这又是一场关于题目理解的博弈!!!
关键句意:
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;
}