题目链接:
L2-005 集合相似度 (25分)
思路:
题意即询问两个集合;
首先将集合A,B分别去重,答案即
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 55;
vector<int> v[maxn];
int cnt[maxn];
inline void solve(int & x, int & y){
vector<int> ans = v[x];
for(int i = 0; i < cnt[y]; ++i) ans.push_back(v[y][i]);
sort(ans.begin(), ans.end());
int nt = unique(ans.begin(), ans.end()) - ans.begin();
printf("%.2f%%\n", 100.0 * (cnt[x] + cnt[y] - nt) / nt);
}
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
int n, k;
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
int m;
scanf("%d", &m);
v[i].resize(m);
for(int j = 0; j < m; ++j) scanf("%d", &v[i][j]);
sort(v[i].begin(), v[i].end());
cnt[i] = unique(v[i].begin(), v[i].end()) - v[i].begin();
}
scanf("%d", &k);
while(k--){
int x, y;
scanf("%d %d", &x, &y);
solve(x, y);
}
return 0;
}