HDOj-1412
{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
两集合相加排序后输出的问题,比较水的一道题,注意集合内没有相同的元素这一点。
附自AC代码:
1 #include<iostream> 2 #include<algorithm>//包含了排序函数sort 3 #include<cstdio> 4 using namespace std; 5 int main(){ 6 int n,m; 7 while(~scanf("%d %d",&n,&m)&&n&&m){ 8 int i,a[20010]; 9 for(i=0;i<n+m;i++){//直接将两个集合全部输入a数组中 10 scanf("%d",&a[i]); 11 } 12 sort(a,a+m+n);//对a数组进行排序 13 printf("%d",a[0]);//首先输出a[0],避免与之后的判断语句冲突 14 for(i=1;i<n+m;i++){ 15 if(a[i-1]==a[i])//当数组内存在相等元素时,跳过其他相等元素只输出最后一个 16 continue; 17 else 18 printf(" %d",a[i]); 19 } 20 printf("\n");//不要忘记最后的\n; 21 } 22 return 0; 23 }
P.S:
写这题的时候突然想系统的巩固一下几大排序算法(总不能老用sort()。。),这几天重点学习一下,争取近几日开一个排序专栏!