第一次在贵论坛求助..望大虾帮忙
给你两个集合,要求{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
计算机学院ACM大学生程序设计竞赛(2006’5)
Recommend
lxj
-.- 看起来这题没啥特别 [第N次RE后,无语] 错误提示是:读写了错误的内存地址...
#include <cstdio>
#include <cstdlib>
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(){
int mA,nB;
while(scanf("%d%d",&mA,&nB)!=EOF&&mA&&nB)
{
int i,orz,j=0;
long int cnt[40000]={0};
int *C=new int[mA+nB];
for(i=0;i<mA+nB;++i)
{
scanf("%d",&orz);
if(!cnt[orz])
{
++cnt[orz];
C[j]=orz;
++j;
}
}
qsort(C,j,sizeof(int),compare);
for(i=0;i<j;++i)
printf("%d ",C[i]);
printf("\n");
delete []C;
}
return 0;
}
----------------解决方案--------------------------------------------------------
原来你对int的范围的概念很有问题
[color=white]
----------------解决方案--------------------------------------------------------
能对这样函数了解也算是高手了...燕子的意思是要size_t?
----------------解决方案--------------------------------------------------------
既然决定用桶排了,何必最后加一个快排呢……Orz……
----------------解决方案--------------------------------------------------------
int是32bit...最大值为2147483647
----------------解决方案--------------------------------------------------------
一时糊涂了
#include <climits>
INT_MAX
那这题哪位给个思路..
----------------解决方案--------------------------------------------------------
cnt[orz] 也敢用?
----------------解决方案--------------------------------------------------------
本人菜鸟 别批评了 给个思路 ..
----------------解决方案--------------------------------------------------------
如果没有什么限制的话,简单点,分别排序后做合并不就行了吗?
----------------解决方案--------------------------------------------------------
楼上很正确, m/n最大值不是10000么? 定义两个size为10000的数组, 结果定义为20000的数组, 排序后合并就行了
----------------解决方案--------------------------------------------------------