set容器的使用,不过我用的是map容器,基本上差不多
#include <iostream>
#include <map>
using namespace std;
map<int, int> a[52];
//数据输入
void Scan(int n)
{
for (int i = 1; i <= n; i++)
{
int h; cin >> h;
for (int j = 0; j < h; j++)
{
int temp; cin >> temp;
a[i][temp]++;
}
}
}
//求Nc Nt
void Ques(int x, int y)
{
int Nc = 0, Nt = 0;
//if (a[x].size() > a[y].size())
//a[x].swap(a[y]);
//Nc
for (auto it = a[x].begin(); it != a[x].end(); it++)
if (a[y].count(it->first))
Nc++;
//Nt
Nt = a[x].size() + a[y].size() - Nc;
double result = 0;
result = (double)Nc / Nt * 100;
printf("%.2lf%%\n", result);
}
int main()
{
int N; cin >> N;
Scan(N);
int N1; cin >> N1;
for (int i = 0; i < N1; i++)
{
int a, b; cin >> a >> b;
Ques(a, b);
}
return 0;
}
其实我有个问题,就是在我的代码中,有个if判断,不过自己给注释了,因为我想的是,求交集的话实际上只用看小的那个不就可以了吗?虽说对答案影响不大,但是若是交换后会有两个测试点不过去。