美文网首页
A1063 Set Similarity (25分)

A1063 Set Similarity (25分)

作者: km15 | 来源:发表于2020-02-16 11:00 被阅读0次

    /*
    集合的相似性:
    1、给出多少个集合
    2、每个集合多少个数字,同时给出所以us胡子

    3、给出一个K,给出一对集合的序号,
    4、根据给出的序号,得出相似性
    保留一位数字

    解题:
    1、集合数组(51)
    2、问题是如何实现相似性,
    我要统计两个集合相同的变量的个数,
    不同的变量的个数

    learn && wrong:
    1、迭代器写的不熟练
    2、printf和scanf,不在iostream中吗
    3、在st中找到相同元素的做法,find(*it) != 尾巴,而且以Y为总的元素,一直计算这招真的不错
    4、输出比率,乘100,再相除,然后加上个百分号
    5、用了insert和find函数,find返回迭代器
    */

    include <iostream>

    include <set>

    include <cstdio>

    using namespace std;

    const int N = 51; //
    set<int> st[N]; //N个集合

    void compare(int x, int y) {
    int totalnum = st[y].size(), samenum = 0; //不同的个数,相同的个数
    for (set<int>::iterator it = st[x].begin();it != st[x].end();++it) { //遍历集合
    if (st[y].find(*it) != st[y].end()) samenum++; //在st[y]中能找到相同元素 !!!
    else totalnum++;
    }
    printf("%.1f%\n", samenum * 100.0 / totalnum); //输出比率!!!

    }

    int main()
    {
    int n, k, q, v, st1, st2;
    cin>>n; //集合个数
    for (int i = 1;i <= n;++i) {
    cin>>k; //集合i中元素的个数
    for (int j = 0;j < k;++j) {
    cin>>v; //集合i中的元素v
    st[i].insert(v); //将元素v中加入集合st[i]中
    }
    }
    cin>>q; //q个查询
    for (int i = 0;i < q;++i) {
    cin>>st1>>st2; //欲比对的集合个数
    compare(st1, st2);
    }
    return 0;
    }

    相关文章

      网友评论

          本文标题:A1063 Set Similarity (25分)

          本文链接:https://www.haomeiwen.com/subject/clsyfhtx.html