• 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 }

  • 相关阅读:
    014 接口和抽象类有什么区别?
    013 抽象类能使用 final 修饰吗?
    web前端开发入门_ web前端需要掌握的知识体系
    使用Ajax同步请求时,等待时间过长增加页面提示问题
    h5移动端禁止长按图片保存
    深入浏览器事件循环的本质
    power assert_更智能、优雅的全方位 assert 断言库
    网络串流播放_HTML5如何优化视频文件以便在网络上更快地串流播放
    什么是断点续传?前端如何实现文件的断点续传
    移动端自适应
  • 原文地址:https://www.cnblogs.com/mxj961116/p/10348228.html
Copyright © 2020-2023  润新知