思路:比较水的一个题,但是想通过所有测试点还需要考虑下最大复杂度的情况。
代码实现:
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 100;
int n, m, x, k;
set<int> s[N], tmp;
signed main()
{
cin >> n;
for(int i = 1; i <= n; i ++){
cin >> m;
for(int j = 0; j < m; j ++){
cin >> x;
s[i].insert(x);
}
}
cin >> k;
for(int i = 0; i < k; i ++){
int s1, s2;
cin >> s1 >> s2;
// 最后一个测试点会超时
// tmp.clear();
// for(auto x:s[s1]){
// tmp.insert(x);
// }
// for(auto x:s[s2]){
// tmp.insert(x);
// }
// int nt = tmp.size();
// int nc = s[s1].size()+s[s2].size()-nt;
int nc = 0, nt = s[s2].size();
for(auto x:s[s1]){
if(s[s2].find(x)!=s[s2].end()) nc ++;
else nt ++;
}
cout << fixed << setprecision(2) << nc*100.0/nt << "%\n";
}
return 0;
}