zoukankan      html  css  js  c++  java
  • 1063 Set Similarity (25 分)

    1063 Set Similarity (25 分)

    Given two sets of integers, the similarity of the sets is defined to be Nc​​/Nt​​×100%, 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 (50) which is the total number of sets. Then N lines follow, each gives a set with a positive M (104​​) and followed by M integers in the range [0,109​​]. After the input of sets, a positive integer K (2000) 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%
    思路
      使用set即可

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<queue>
    #include<string>
    #include<map>
    #include<set>
    #include<stack>
    #include<string.h>
    #include<cstdio>
    #include <unordered_map>
    #include<cmath>
    
    using namespace std;
    
    int main()
    {
        int n;
        scanf("%d",&n);
        set<int>s[n+1];
        int num;
        for(int i=1;i<n+1;i++)
        {
            scanf("%d",&num);
            for(int j=0;j<num;j++)
            {
                int temp;
                scanf("%d",&temp);
                s[i].insert(temp);
            }
        }
        int k;
        scanf("%d",&k);
        for(int i=0;i<k;i++)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            set<int> result;
            set_intersection(s[a].begin(),s[a].end(),s[b].begin(),s[b].end(),inserter(result,result.begin()));
            int nc=result.size();
            int nt=s[a].size()+s[b].size()-nc;
           // cout<<nc<<" "<<nt<<endl;
            printf("%.1f\%
    ",nc*100.0/nt);
        }
        return 0;
    }
     
  • 相关阅读:
    window C/C++ 简单的IDE编译器
    ubuntu 安装 lamp
    架构设计
    linux 性能分析
    wifi基本原理
    openwrt 编译
    学习笔记day5:inline inline-block block区别
    脱离原来文档流产生浮动框
    meta标签清理缓存
    百度web前端面试2015.10.18
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10327800.html
Copyright © 2011-2022 走看看