zoukankan      html  css  js  c++  java
  • PAT A1063——set的常见用法详解

    set 常用函数实例

    set是一个内部自动有序且不含重复元素的容器

    (1)insert()

    (2)find()  st.find(*it) 找到返回其迭代器,否者返回st.end()

    (3)size()

    (4)clear():清空所有元素

    (5)erase():erase(st.begin()+3)删除第四个元素;erase(first,last)删除【first,last)内所有元素;
    (6)如果set内定义的是结构体,需要重载<运算符
    typedef struct Car {
    int id;
    int numForward;
    int maxLayer;
    double packetLoss;
    }Car;
    bool operator<(const Car &x,const Car &y) {
        return x.id < y.id;
    }
    1063 Set Similarity

    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个集合,给出的集合中可能含有相同的值。然后要求M个查询,每个查询给出两个集合的编号X和Y,求集合X和集合Y的相同元素率,即两个集合的交集和并集(均需去重)的元素个数的比率
    参考代码:
     1 #include<cstdio>
     2 #include<set>
     3 using namespace std;
     4 const int N  = 51;
     5 set<int> st[N];     //N个集合
     6 void compare(int x, int y) {    //比较集合st[x]和集合st[y]
     7     int totalNum = st[y].size(), sameNum = 0;   //不同数的个数,相同数个个数
     8     //遍历集合st[x]
     9     for(set<int>::iterator it = st[x].begin(); it != st[x].end(); it++) {
    10         if(st[y].find(*it) != st[y].end()) sameNum++;   //在st[y]中找到相同该元素
    11         else totalNum++;    //在st[y]中找不到相同元素
    12     }
    13     printf("%.1f%%
    ", 100 * (double)sameNum/totalNum);     //输出比率
    14 }
    15 
    16 int main(){
    17     int n,k,q,v,st1,st2;
    18     scanf("%d", &n);    //集合个数
    19     for(int i = 1; i <= n; i++) {
    20         scanf("%d", &k);    //集合i中的元素个数
    21         for(int j = 0; j < k; j++) {
    22             scanf("%d", &v);    //集合i中的元素v
    23             st[i].insert(v);    //将元素v加入集合st[i]中
    24         }
    25     }
    26     scanf("%d", &q);    //q个查询
    27     for(int i = 0; i < q; i++) {
    28         scanf("%d%d", &st1, &st2);  //欲对比的集合编号
    29         compare(st1, st2);  //比较两个集合
    30     }
    31     return 0;
    32 }

  • 相关阅读:
    Tomcat详解系列(3)
    Tomcat详解系列(2)
    Tomcat详解系列(1)
    常用开发库
    单元测试
    [MongoDB知识体系] 一文全面总结MongoDB知识体系
    问题记录:net::ERR_CERT_AUTHORITY_INVALID
    CSS+DIV特色开关按钮
    Jquery的Ajax简易优化思路
    CSS+DIV简易灯泡案例
  • 原文地址:https://www.cnblogs.com/mxj961116/p/10348228.html
Copyright © 2011-2022 走看看