zoukankan      html  css  js  c++  java
  • pat advanced level 1063

    1063 Set Similarity (25)(25 分)

    Given two sets of integers, the similarity of the sets is defined to be N~c~/N~t~*100%, 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 (<=50) which is the total number of sets. Then N lines follow, each gives a set with a positive M (<=10^4^) and followed by M integers in the range [0, 10^9^]. 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%



    /**********************
    author: yomi
    date: 18.8.2
    ps: 使用algorithm下的count函数会超时 得用set下的count
    **********************/
    #include <iostream>
    #include <set>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    set<int>s[60];
    int main()
    {
        int n, k, m, t;
    
        scanf("%d", &n);
        for(int i=0; i<n; i++){
            scanf("%d", &m);
            for(int j=0; j<m; j++){
                scanf("%d", &t);
                s[i].insert(t);
            }
        }
        scanf("%d", &k);
        int a, b;
        for(int i=0; i<k; i++){
            scanf("%d%d", &a, &b);
            int c = 0, d = 0;
            set<int>::iterator iter;
            for(iter=s[a-1].begin(); iter!=s[a-1].end(); ++iter){
                if(s[b-1].count(*iter)){
                    c++;
                }
            }
    
            int nc = c;
            int nt = s[a-1].size()+s[b-1].size()-c;
            double ans = nc*1.0/nt*100;
            printf("%.1f%%
    ", ans);
        }
        return 0;
    }
    /**
    3
    3 99 87 101
    4 87 101 5 87
    7 99 101 18 5 135 18 99
    2
    1 2
    1 3
    **/
  • 相关阅读:
    Go 模板
    使用Go开发web服务器
    CLI:使用Go开发命令行应用
    MyBatis 注解使用动态SQL
    Tomcat 使用Redis存储Session
    [翻译] java NIO Buffer
    [翻译] java NIO Channel
    [翻译]java nio 概述
    [翻译] java NIO 教程---介绍
    接口的定义常量与使用
  • 原文地址:https://www.cnblogs.com/AbsolutelyPerfect/p/9409417.html
Copyright © 2011-2022 走看看