1063 Set Similarity (25 分)

Given two sets of integers, the similarity of the sets is defined to be /, where N​c​​ is the number of distinct common numbers shared by the two sets, and N​t​​ 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%
   思路:挺麻烦的一个题,充分利用了vector和set
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
#define eps 1e-8
#define  inf  0x3fffffff

int main(){
    vector<set<int> > v;
    int n,k,m,t;
    cin>>n;
    v.resize(n);
    for(int i=0;i<n;i++){
        cin>>m;
        for(int j=0;j<m;j++){
            cin>>k;
            v[i].insert(k);
        }
    }
    cin>>t;
    int a,b;
    for(int i=0;i<t;i++){
        cin>>a>>b;
        int ct=0,nt=v[a-1].size();
        for(set<int>::iterator it=v[b-1].begin();it!=v[b-1].end();it++){
            if(v[a-1].find(*it)!=v[a-1].end()){
                ct++;
            }
            else{
                nt++;
            }
        }
        printf("%.1f%\n",1.0*ct/nt*100);
    }
    return 0;
}

 

上一篇:【HeadFirst 设计模式学习笔记】1.策略模式


下一篇:PTA basic 1063 计算谱半径 (20 分) c++语言实现(g++)