hdu 1412 {A} + {B}(集合合并)

{A} + {B}

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 11944    Accepted Submission(s): 5000

Problem Description

给你两个集合,要求{A} + {B}.

注:同一个集合中不会有两个相同的元素.

Input

每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.

Output

针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.

Sample Input

1 2
1
2 3
1 2
1
1 2

Sample Output

1 2 3
1 2

Author

xhd

Source

HDU 2006-5 Programming Contest

这道题我可以用一个数组来存储数据,然后进行相应的排序,当前后次序不相同的时候,就输出,这样就能解决问题。

代码如下:

#include<stdio.h>
#include<algorithm>
using namespace std;
int s[20020];
int main()
{
	int n,m,i;
	while(~scanf("%d%d",&n,&m))
	{
		for(i=0;i<n+m;i++)
		scanf("%d",&s[i]);
		sort(s,s+n+m);
		printf("%d",s[0]);
		for(i=1;i<n+m;i++)
		{
			if(s[i-1]!=s[i])
			{
				printf(" %d",s[i]);
			}
		}
		printf("\n");
	}
	return 0;
}

下面的代码是我之前的很麻烦的办法,但是感觉还挺好,粘贴如下

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[10010],b[10010],s[100100],t[100100];
int main()
{
	int n,m;
	while(~scanf("%d%d",&n,&m))
	{
		int i,maxn;
		memset(s,0,sizeof(s));
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
			s[a[i]]++;
		}
		for(i=0;i<m;i++)
		{
			scanf("%d",&b[i]);
			s[b[i]]++;
		}
		sort(a,a+n);
		sort(b,b+m);
		maxn=max(a[n-1],b[m-1]);
		int count=0;
		for(i=0;i<=maxn;i++)
		{
			if(s[i])
			{
				t[count++]=i;
			}
		}
		sort(t,t+count);
		printf("%d",t[0]);
		for(i=1;i<count;i++)
		{
			printf(" %d",t[i]);
		}
		puts("");
	}
	return 0;
}
时间: 2024-10-29 04:46:12

hdu 1412 {A} + {B}(集合合并)的相关文章

hdu 5893 (树链剖分+合并)

List wants to travel Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 429    Accepted Submission(s): 92 Problem Description A boy named List who is perfect in English. Now he wants to travel an

【转载】多个集合合并成没有交集的集合-实现

原博文地址http://www.cnblogs.com/ttltry-air/archive/2012/08/14/2638437.html 1.问题描述 将多个集合合并成没有交集的集合. 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}. (1)请描述你解决这个

并查集(集合合并) + 缩点

正解是dfs的一道题目被我以为成了并查集,结果坑了队友.现在分析一下自己当时为什么会想成是并查集呢. 题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 题意:告诉一张n点m边的图,求哪些边是桥.其实就是缩点,然而却大脑短路,直接认定是并查集了,现在的我真的不能理解当时的自己.... 当时想的是把所有的环缩成一个点,然后剩下的边就是桥了,缩点,第一时间想的就是并查集,其实并查集的操作一般有三个: 1.初始化 把

6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场

题意: 给出一个仙人掌图,然后求他的前K小生成树. 思路: 先给出官方题解 由于图是一个仙人掌,所以显然对于图上的每一个环都需要从环上取出一条边删掉.所以问题就变为有 M 个集合,每个集合里面都有一堆数字,要从每个集合中选择一个恰好一个数加起来.求所有的这样的和中,前 K 大的是哪些.这就是一个经典问题了. 点双联通就不说了 都一眼能看出来做法就是缩点之后每个环每次取一个,然后找最大的k个所以这道题的难点就在这里,做法当然是不知道啦,看了题解和博客才懂的.以前做过两个集合合并的,这个是k个合并,

hdu 1068 最大独立集合

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 题意:题意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m) n1 n2 n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数. 题解: 独立集:图的顶点集的子

集合合并

1.集合合并: 给定一个字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应 输出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg} (1)请描述你解决这个问题的思路: (2)请给出主要的处理流程,算法,以及算法的复杂度 (3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题). 2.集合合并,同时去掉重复的

【线段树】HDU 3397 Sequence operation 区间合并

操作 Change operations: 0 a b change all characters into '0's in [a , b] 1 a b change all characters into '1's in [a , b] 2 a b change all '0's into '1's and change all '1's into '0's in [a, b] Output operations: 3 a b output the number of '1's in [a,

HDU 4339 线段树区间合并

Query Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2573    Accepted Submission(s): 851 Problem Description You are given two strings s1[0..l1], s2[0..l2] and Q - number of queries.Your task

多个集合合并成没有交集的集合

问题描述                                                                                      将多个集合合并成没有交集的集合. 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}.