1063. Set Similarity (25)

#include <iostream>
#include <set>

using namespace std;

int main()
{
	int n;
	scanf("%d", &n);

	int i, k, j, next;
	set<int> s[60];

	for(i = 1; i <= n; i++)
	{
		scanf("%d", &k);

		for(j = 1; j <= k; j++)
		{
			scanf("%d", &next);
			s[i].insert(next);
		}
	}

	int m;
	scanf("%d", &m);

	set<int> ::iterator it[2];
	int index[2], num[2], total, same;

	for(i = 1; i <= m; i++)
	{
		scanf("%d%d", &index[0], &index[1]);

		total = s[index[0]].size() + s[index[1]].size();
		same = 0;

		for(it[0] = s[index[0]].begin(), it[1] = s[index[1]].begin(); it[0] != s[index[0]].end() && it[1] != s[index[1]].end(); )
		{
			num[0] = *it[0];
			num[1] = *it[1];

			if(num[0] == num[1])
			{
				same++;
				it[0]++;
				it[1]++;
			}
			else if(num[0] > num[1])
			{
				it[1]++;
			}
			else
			{
				it[0]++;
			}
		}

		total -= same;
		printf("%.1lf%%\n", same * 1.0 / total * 100);
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 17:12  王景迁  阅读(3)  评论(0)    收藏  举报

导航