0
点赞
收藏
分享

微信扫一扫

pta L2 -005 集合相似度

工程与房产肖律师 2022-03-21 阅读 73
c++

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判断,不过自己给注释了,因为我想的是,求交集的话实际上只用看小的那个不就可以了吗?虽说对答案影响不大,但是若是交换后会有两个测试点不过去。

举报

相关推荐

0 条评论