• L2-005 集合相似度


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

    输入格式:

    输入第一行给出一个正整数N(≤50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(≤104),是集合中元素的个数;然后跟M个[0,109]区间内的整数。

    之后一行给出一个正整数K(≤2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。

    输出格式:

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

    输入样例:

    1. 3
    2. 3 99 87 101
    3. 4 87 101 5 87
    4. 7 99 101 18 5 135 18 99
    5. 2
    6. 1 2
    7. 1 3

    输出样例:

    1. 50.00%
    2. 33.33%

    代码长度限制

    16 KB

    时间限制

    400 ms

    内存限制

    64 MB

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. using namespace std;
    7. vectorint> > dataset;
    8. set<int> Nt;
    9. int main()
    10. {
    11. int n, num, d, tests, index1, index2;
    12. cin >> n;
    13. dataset.resize(n+1); //分配空间,功能类似malloc
    14. //将n个集合放进set数组中
    15. for(int i = 1; i<=n ; i++){
    16. cin >> num;
    17. for(int j = 0; j < num; j++){
    18. cin >> d;
    19. dataset[i].insert(d);
    20. }
    21. }
    22. cin >> tests;
    23. while(tests--){
    24. cin >> index1 >> index2; //输入两个要算相似度的集合序号
    25. int Nc = 0, Nt = 0;
    26. vector<int> is, us;
    27. //给is和us开辟空间,最大为两个集合之和
    28. is.resize(dataset[index1].size()+dataset[index2].size());
    29. us.resize(dataset[index1].size()+dataset[index2].size());
    30. //set_intersection函数为求交集 1~2个参数是第一个数组的区域,3~4个参数是第二个数组的区域,最后一个是放到新数组的位置
    31. vector<int>::iterator itEndPos = set_intersection(dataset[index1].begin(),dataset[index1].end(),dataset[index2].begin(),dataset[index2].end(),is.begin());
    32. is.resize(itEndPos-is.begin()); //将没有存放数据的内容裁剪掉,begin一个个填充完后会移动到最后一个位置
    33. //set_intersection函数为求并集 1~2个参数是第一个数组的区域,3~4个参数是第二个数组的区域,最后一个是放到新数组的位置
    34. vector<int>::iterator utEndPos = set_union(dataset[index1].begin(),dataset[index1].end(),dataset[index2].begin(),dataset[index2].end(),us.begin());
    35. us.resize(utEndPos-us.begin());
    36. //
    37. Nc = is.size();
    38. Nt = us.size();
    39. cout << fixed << setprecision(2) << 1.0*Nc/Nt*100<<"%"<
    40. }
    41. return 0;
    42. }

  • 相关阅读:
    都已经有了 HTTP 协议,怎么还要有 RPC?
    ApiPost接口测试工具
    【CSS】css常用复杂选择器都有哪些?看这一篇就够了_07
    Tomcat多实例部署实验
    OceanBase v4.2 特性解析:新增三种临时表功能,更多的Oracle语句兼容
    使用智能电销机器人,拓客效果更佳!
    java-net-php-python-net本科生毕业设计选导师系统演示录像2019计算机毕业设计程序
    使用 Secrets OPerationS 管理 Kubernetes 密钥
    五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
    SpringBoot配置连接两个或多个数据库
  • 原文地址:https://blog.csdn.net/weixin_63484669/article/details/134084318