pat 1063. Set Similarity (25)

用vector二维存储

sort来对每个集合进行排序

nc 求两个集合交

nt 求两个集合并

#include<iostream>

#include<stdio.h>

#include<algorithm>

#include<vector>

#include<string.h>

using namespace std;

vector<vector<int> > vec;

int main()

{

	int n,m,k,i,x,j,y,nc,nt;

	scanf("%d",&n);

	for(i=0;i<n;i++)

	{

		vector<int >v;

		//vector<int>::iterator p=v.begin();

		scanf("%d",&m);

		while(m--)

		{

			scanf("%d",&x);

			if(find(v.begin(),v.end(),x)==v.end())v.push_back(x);//去重复元素	

		}

		sort(v.begin(),v.end());
		vec.push_back(v);

	}

	scanf("%d",&k);

	while(k--)

	{

		scanf("%d%d",&x,&y);

		x--,y--;

		nc=0;

		nt=vec[x].size()+vec[y].size();

		for(i=0,j=0;i<vec[x].size()&&j<vec[y].size();)

		{

			if(vec[x][i]==vec[y][j])

			{

				i++;

				j++;

				nt--;

				nc++;

			}

			else

				if(vec[x][i]>vec[y][j])j++;

				else

					i++;

		}

		printf("%.1lf%%\n",nc*100.0/nt);

	}

	return 0;

	

}


 

 

你可能感兴趣的:(set)