HDOJ-1412(set)

{A} + {B}

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17014    Accepted Submission(s): 7110


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
 

 

依旧是这道两集合相加的问题,我们之前探讨过用数组排序解决这个问题(见这里),这次我们换用set集合容器来解决。因为set容器会拒绝保存与已含元素相等的元素,用来解这种集合相加问题更加简便。

 

AC代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<set>
 4 using namespace std;
 5 int main(){
 6     
 7     int n,m,a;
 8     while(~scanf("%d %d",&n,&m)){
 9         set<int> s;//定义集合对象s 
10         while(n--){//插入第一个集合 
11             scanf("%d",&a);
12             s.insert(a);
13         }
14         while(m--){//插入第二个集合 
15             scanf("%d",&a);
16             s.insert(a);
17         }
18         set<int>::iterator it;//定义前向迭代器 
19         it=s.begin();//注意输出格式的空格 
20         printf("%d",*it);
21         it++;
22         for(it;it!=s.end();it++){//遍历 
23             printf(" %d",*it);
24         }
25         printf("\n");
26     }
27     return 0;
28 } 

 

posted @ 2016-05-24 22:36  Kiven#5197  阅读(152)  评论(0编辑  收藏  举报