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): 7110Problem Description给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.
Input每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.
Output针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.
Sample Input1 212 31 211 2Sample Output1 2 31 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 }