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

来源:互联网 发布:amd是什么软件 编辑:程序博客网 时间:2024/06/06 02:15

{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 212 31 211 2
 

Sample Output
1 2 31 2
 

Author
xhd
 

Source
HDU 2006-5 Programming Contest 
这道题哟开始使用的是 遍历
比较麻烦,但是认为这个方法值得掌握,先将超时的代码粘贴如下:
#include<stdio.h>#include<math.h>#include<string.h>#include<algorithm>using namespace std;int a[11000],b[11000],s[100100],t[100100];int main(){int n,m;int i,j,maxn;while(~scanf("%d%d",&n,&m)){memset(s,0,sizeof(s));for(i=0;i<n;i++){scanf("%d",&a[i]);s[a[i]]++;//printf("%d",a[i]);}for(i=0;i<m;i++){scanf("%d",&b[i]);s[b[i]]++;//printf("%d",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]>=1){t[count]=i;count++;}else continue;}sort(t,t+count);printf("%d",t[0]);for(i=1;i<count;i++)printf(" %d",t[i]);printf("\n");}return 0;}

然后就是之后,发现用一个数组就可以,精简的代码如下:
#include<stdio.h>#include<algorithm>using namespace std;int s[20020];int main(){int a,b,i;while(~scanf("%d%d",&a,&b)){for(i=0;i<a+b;i++){scanf("%d",&s[i]);}sort(s,s+a+b);printf("%d",s[0]);for(i=1;i<a+b;i++){if(s[i-1]!=s[i])printf(" %d",s[i]);}puts("");}return 0;}


0 0
原创粉丝点击