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

    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%
     
     思路:挺麻烦的一个题,充分利用了vector和set,
    注意:
    利用map给第一行数据打标记,然后再去遍历第二行数据判断是否为交集元素,这样子只是将两行数据都只遍历了一遍,会超时
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    #define eps 1e-8
    #define  inf  0x3fffffff
    vector<set<int> > ve;
    int main(){
        int n,m;
        scanf("%d",&n);
        ve.resize(n);
        int temp;
        for(int i=0;i<n;i++){
            scanf("%d",&m);
            for(int j=0;j<m;j++){
                scanf("%d",&temp);
                ve[i].insert(temp);
            }
        }
        int k,a,b;
        scanf("%d",&k);
        for(int i=0;i<k;i++){
            set<int> s,st;
            scanf("%d %d",&a,&b);
            int sum=ve[a-1].size()+ve[b-1].size();
            for(set<int>::iterator it=ve[a-1].begin();it!=ve[a-1].end();it++){
                if(ve[b-1].find(*it)!=ve[b-1].end()){
                    st.insert(*it);
                }
            }
            
            printf("%.1f%
    ",st.size()*100.0/(sum-st.size()));
        }
        return 0;
    }
  • 相关阅读:
    扯一下关于魔兽改键的蛋
    Emacs23.3在ubuntu10.10下的手动编译与安装
    GRUB2英文文档的部分翻译
    WinForm中Crossthread operation not valid错误的解决方法
    C# 嵌入式资源
    raster配准
    excel vba 玫瑰图 风速 风向
    使用UserControl好处
    How does ArcSDE use Oracle Spatial? arcsde怎么使用oracle spatial
    信息抽取的定义(definition of information extraction)
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14947858.html
Copyright © 2011-2022 走看看