PTA-L2-005 集合相似度 (25分)
这道题是set的用法。
然后我这个憨批还一次一次求有多少个不相等相同的元素和多少个不相等元素,因为用set的迭代器次数过多,导致我让一个测试点超时了。。应该还有我用了cin的原因。
我们只要算出有多少个不相等相同的元素,然后用我们可以直接获取set的size,然后相加减去不相等相同的元素就是总共不相等的元素了。
代码部分:
#include <bits/stdc++.h>
#define mst(a, n) memset(a, n, sizeof(a))
using namespace std;
const int N = 1e3 + 10;
const int M = 55;
const int INF = 1e6 + 10;
typedef long long ll;
int n, m, k;
int x, y;
set<int> s[M];
int main()
{
scanf ("%d", &n);
for (int i = 0; i < n; i++)
{
int t;
scanf ("%d", &t);
while (t--)
{
int tt;
scanf ("%d", &tt);
s[i].insert(tt);
}
}
scanf ("%d", &m);
while (m--)
{
set<int>::iterator it;
scanf ("%d%d", &x, &y);
x--;
y--;
int nx = s[x].size();
int ny = s[y].size();
int cnt = 0;
for (it = s[x].begin(); it != s[x].end(); ++it)
{
if (s[y].find(*it) != s[y].end())
{
cnt++;
}
}
double ans = 1.0 * cnt / (nx + ny - cnt) * 100;
printf ("%.2f%\n", ans);
}
return 0;
}