FDU 2018 | 2. 集合交并

2024-03-20 22:04
文章标签 集合 2018 fdu

本文主要是介绍FDU 2018 | 2. 集合交并,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 题目描述
  • 2. 我的尝试
    • 1. C++容器
    • 2. 排序+二路归并

1. 题目描述

AcWing 3688 集合交并
输入两个集合,分别求其交集和并集中元素的个数,每个集合中可能存在相同的元素,而最终的交集和并集中应该不存在。

输入格式
第一行输入两个整数 n,m 表示两个集合中元素的个数。
第二行输入 n 个整数,表示第一个集合中的元素。
第三行输入 m 个整数,表示第二个集合中的元素。

输出格式
输出两个整数以空格分开,表示其交集和并集中元素的个数。

数据范围
1 ≤ n , m ≤ 1 0 5 1≤n,m≤10^5 1n,m105, 给定集合元素取值范围 [ 1 , 1 0 9 ] [1,10^9] [1,109]

输入样例

4 5
3 4 7 3
4 6 3 2 6

输出样例

2 5

2. 我的尝试

1. C++容器

考察set基础用法

#include<stdio.h>
#include<string.h>
#include<string>
#include<set>
#include<algorithm>
#include<iterator>
using namespace std;
set<int> a, b, c, d;
int n, m, x;
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; ++i)scanf("%d", &x), a.insert(x);for (int i = 1; i <= m; ++i)scanf("%d", &x), b.insert(x);set_intersection(a.begin(), a.end(), b.begin(), b.end(), inserter(c, c.begin()));set_union(a.begin(), a.end(), b.begin(), b.end(), inserter(d, d.begin()));printf("%d %d", c.size(), d.size());
}

2. 排序+二路归并

分别用两个数组来存两个集合并对其排序(此时未去重),排序后用类似二路归并的方法得到找到同时在两集合中出现的元素,得到交集(已去重)。并集元素个数可以用原始两集合元素的个数和减去交集元素个数得到。

#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;
int a[N], b[N];
vector<int> r;int main()
{int n, m;int cnt1 = 0, cnt2 = 0;cin >> n >> m;for (int i = 0; i < n; i ++) scanf("%d", &a[i]);for (int i = 0; i < m; i ++) scanf("%d", &b[i]);sort(a, a + n);sort(b, b + m);for (int i = 0; i < n; i++)if (i == 0 || a[i] != a[i - 1]) cnt1++;for (int j = 0; j < m; j++)if (j == 0 || b[j] != b[j - 1]) cnt2++;int i = 0, j = 0;while (i < n && j < m){if (a[i] < b[j]){i ++;while (i == 0 || (i < n && a[i] == a[i-1])) i++;if (i == n - 1 && a[i] == b[i-1]) break;}else if (b[j] < a[i]){   j ++;while (j == 0 || (j < m && b[j] == b[j-1])) j++;if (j == m - 1 && b[j] == b[j-1]) break;}else {r.push_back(a[i]);i++, j++;while (i == 0 || (i < n && a[i] == a[i-1])) i++;while (j == 0 || (j < m && b[j] == b[j-1])) j++;}}cout << r.size() << " " << cnt1 + cnt2 - r.size();
}

这篇关于FDU 2018 | 2. 集合交并的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/830866

相关文章

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

Java集合中的List超详细讲解

《Java集合中的List超详细讲解》本文详细介绍了Java集合框架中的List接口,包括其在集合中的位置、继承体系、常用操作和代码示例,以及不同实现类(如ArrayList、LinkedList和V... 目录一,List的继承体系二,List的常用操作及代码示例1,创建List实例2,增加元素3,访问元

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

2018秋招C/C++面试题总结

博主从8月中旬开始大大小小面试了十几家公司,至今也许是告一段落吧,希望后面会有好结果,因此总结记录一些C/C++方向常见的问题。和大家一起学习! 参考了互联网的各种资源,自己尝试归类整理,谢谢~ 一、C和C++的区别是什么? C是面向过程的语言,C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。 C中函数不能进行重载,C++函数可以重载 C++在C的基础上增添类,C是一个结构