• PAT 1063 Set Similarity[比较]


    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%

     题目大意:给出N个集合,并且给出查询,Nc表示两个集合中互异的相同的数的个数,Nt表示两个集合中不同的数的总数。求出二者的比例。

    //我一看,这数据量太大了吧,不能蛮干,复杂度太高了。肯定是使用集合,但是怎么使用呢?我心里没有底。毕竟复杂度太高了。

    //看了柳神的代码才恍然大悟,我是笨死了。

    2018-11-18更————

    又做了一遍AC了:

    #include <iostream>
    #include <set>
    #include <cstdio>
    using namespace std;
    
    set<int> st[51];
    int main() {
        int n,m,t;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>m;
            for(int j=0;j<m;j++){
                cin>>t;
                st[i+1].insert(t);
            }
        }
        cin>>m;
        int s1,s2;
        for(int i=0;i<m;i++){
            cin>>s1>>s2;
            int nc=0,nt=0;
            //cout<<st[s1].size()<<" "<<st[s2].size()<<'
    ';
            for(auto it=st[s1].begin();it!=st[s1].end();it++){
    //            if(st[s2].find(*it)!=0){
    //                nc++;
    //            }
                    if(st[s2].find(*it)!=st[s2].end()){
                        nc++;
                    }
            }
    //        set<int> s;
    //        s.insert(st[s1]);
    //        s.insert(st[s2]);
    //        nt=s.size();
            nt=st[s1].size()+st[s2].size()-nc;
            printf("%.1f%
    ",1.0*nc/nt*100);
        }
    
        return 0;
    }

    1.其中在写set的find函数时,一直不行,不能判==0或者1,而是set.end()才对。学习了。

  • 相关阅读:
    django基础之ORM基础知识
    Centos7 搭建sonarQube
    centos7安装部署SVN
    centos7.5 SVN 搭建
    centos 7 部署 zookeeper
    centos7 发送邮件
    Centos7安装配置Gitlab-CE
    openldap 双主模式部署
    K8s一键安装
    ELK实战部署
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/9952924.html
Copyright © 2020-2023  润新知