1063 Set Similarity

Given two sets of integers, the similarity of the sets is defined to be /, where Nc​​ is the number of distinct common numbers shared by the two sets, and Nt​​ is the total number of distinct numbers in the two sets. Your job is to calculate the similarity of any given pair of sets.

Input Specification:

Each input file contains one test case. Each case first gives a positive integer N (≤) which is the total number of sets. Then N lines follow, each gives a set with a positive M (≤) and followed by M integers in the range [0]. After the input of sets, a positive integer K (≤) is given, followed by K lines of queries. Each query gives a pair of set numbers (the sets are numbered from 1 to N). All the numbers in a line are separated by a space.

Output Specification:

For each query, print in one line the similarity of the sets, in the percentage form accurate up to 1 decimal place.

Sample Input:

3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3

Sample Output:

50.0%
33.3%
/*
    Name:
    Copyright:
    Author:  流照君
    Date: 2019/8/17 16:01:53
    Description:
*/
#include <iostream>
#include<string>
#include <algorithm>
#include <vector>
#include<set> 
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
vector<set<int>> v;
int main(int argc, char** argv)
{
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int n,k,temp,q,a,b,nc,nt;
    cin>>n;
    vector<set<int>> v(n);
    for(int i=0;i<n;i++)
    {
    	cin>>k;
    	while(k--)
    	{
    		cin>>temp;
    		v[i].insert(temp); 
		}
	}
    cin>>q;
    while(q--)
    {
    	cin>>a>>b;
    	nt=v[b-1].size();
    	nc=0;
    	for(auto it=v[a-1].begin();it!=v[a-1].end();it++)
    	{
    		if(v[b-1].find(*it)==v[b-1].end()) //没找到 
    		nt++;
    		else
    		nc++;
		}
		printf("%.1f%\n",double(nc)/nt*100);
	}
    return 0;
}

  

 

posted @ 2019-08-17 16:15  流照君  阅读(146)  评论(0编辑  收藏  举报