首页 > 编程语言 >集合相似度c++

集合相似度c++

时间:2024-08-10 16:55:48浏览次数:19  
标签:元素 nc 个数 c++ 整数 相似 集合 nt

初入新蒟蒻

多多关照。

弱弱问一句,有没有东营区一中的学哥学姐

                                                             集合相似度

题目是这样的——

题目描述

给定两个整数集合,它们的相似度定义为:Nc/Nt×100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

输入

输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,109]区间内的整数。
之后一行给出一个正整数K(≤2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。

输出

对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后2位的百分比数字。

样例输入 Copy
3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3
样例输出 Copy
50.00%
33.33%

我用的是STL中的set

set是什么呐?

自己看:https://blog.csdn.net/weixin_44668898/article/details/102089892(膜拜大佬)


a:{2,2,3,4}--》{2,3,4}
b:{2,2,3,5}--》{2,3,5}
Nc:2,3

集合会自动去重(set)

Nc:遍历集合a,查找集合a中的元素是否在b中出现,如果在b中出现,那么nc++
nt: 集合a的元素个数+集合b的元素个数-nc

相似度:100.0 * nc / nt,按照小数点后面保留2位输出

废话不多说上代码(要自己理解,但不要抄)

//周小灵彤2024/8/10
#include<bits/stdc++.h>
using namespace std;
const int MX=50;
set<int>s[MX+10];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);//优化,没有也行
    int n,i,m,j,x,k,y;
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>m;
        for(j=1;j<=m;j++)
        {
            cin>>x;
            s[i].insert(x);//集合是一个数组元素
        }
    }
    cin>>k;
    while(k--)
    {
        int nc=0,nt;//nc:两个集合都有的不相等整数的个数
        //nc:既在集合a中,又在集合b中存在的元素不相等整数个数
        //nt两个集合一共有的不相等整数的个数,两个集合合并之后,元素的个数
        cin>>x>>y;//x和y是两个集合的编号
        for(auto it =s[x].begin();it!=s[x].end();it++)//遍历集合x
        {
            if(s[y].count(*it))//如果集合x的元素在集合y中出现
            {
                nc++;
            }
        }
        nt=s[x].size()+s[y].size()-nc;
        cout<<fixed<<setprecision(2)<<100.0*nc/nt<<"%"<<'\n';//100.0*nc/nt,五年级学的
    }
    return 0;
}

点个关注,和赞不过分吧

标签:元素,nc,个数,c++,整数,相似,集合,nt
From: https://blog.csdn.net/zhouyutong_0912/article/details/141091890

相关文章

  • C++基础入门
    一·命名空间(namespace)正常namespace的使用include<stdio.h>#include<stdlib.h>//1.正常的命名空间定义//wzh是命名空间的名字,⼀般开发中是⽤项⽬名字做命名空间名。namespacebit{//命名空间中可以定义变量/函数/类型intrand=10;intAdd(in......
  • 1.动手编写第一个makefile编译c++多文件项目
    1.动手编写第一个makefile编译c++多文件项目1.1ubuntu开发环境安装•apt-getupdate#更新安装源•apt-getinstallg++#安装gcc和c++的开发库•apt-getinstallgdb#调试工具•apt-getinstallmake•apt-getinstallopenssh-server#远程连接工具•apt-getin......
  • 2024年华为OD机试真题-推荐多样性-C++-OD统一考试(C卷D卷)
    2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集) 题目描述:推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略:1.各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列......
  • c++习题18-计算鞍点
    目录一,题目二,思路三,代码一,题目给定一个5×5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8)。11356912478101056......
  • c++习题20-百钱百鸡
    目录一,题目二,思路三,代码 一,题目农夫约翰今天来到了畜牧市场,想给自己的农场里买点鸡回去。已知公鸡一只5块钱,母鸡3块钱,小鸡崽子一块钱三只。农夫手里有N元,他想买N只鸡,但是他跟ljc一样数学不好,想让你帮他算一算有几种买法,以方便他挑选。输入描述一个整数N,约翰手里的钱......
  • C++ 类型转换
    目录0.前言1.C语言类型转换1.1隐式类型转换1.2显式类型转换2.C++强制类型转换2.1static_cast2.2reinterpret_cast2.3const_cast2.4dynamic_cast3.为什么C++需要4种强制类型转换3.1类型转换的多样性需求3.2提高类型转换的安全性3.3提供更明确的语义3.4支持高......
  • C++标准库函数
    很多人用C++就是因为C++有很多方便的函数,所以我来科普一下方便的输入输出函数:scanf(); 高效的输入(TLE的可以和printf一起用,很快!)格式:输入变量a:scanf(...,&a);一定要加&(取地址)...是按a的类型来定的:%d:int%lld:longlong%lf:double%c:charprintf(); ......
  • 【数据结构与算法】输出二叉树中从每个叶子结点到根结点的路径 C++实现(二叉树+栈+深度
    二叉树叶子节点到根节点的路径题目描述给定一棵二叉树的后序遍历序列post[s1..t1]和中序遍历序列in[s2..t2],设计一个算法,输出二叉树中从每个叶子节点到根节点的路径。请使用栈的数据结构解决。输入格式输入包括两行:第一行为后序遍历序列post[s1..t1]。第二行为中序......
  • C++类和对象(上)
    文章目录一、类的定义1、类的定义格式2、访问限定符3、类域二、实例化1、实例化概念2、对象的大小三、this指针一、类的定义1、类的定义格式calss是定义类的关键词,用法更C语言中的结构体struct关键词用法一样,区别是类可以在里面创建函数,当然在C++中也是兼容结......
  • C++day05
    1>思维导图2>搭建一个货币的场景,创建一个名为RMB的类,该类具有整型私有成员变量yuan(元)、jiao(角)和fen(分),并且具有以下功能:(1)重载算术运算符+和-,使得可以对两个RMB对象进行加法和减法运算,并返回一个新的RMB对象作为结果。(2)重载关系运算符>,判断一个RMB对象是......