http://acm.hunnu.edu.cn/online/?action=problem&type=show 这是一道合并问题 求大牛帮忙ac
1个回答
展开全部
AC了,看帐号。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<time.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
const int MAX=110000;
int c[MAX];
void read(int n)
{
int x;
while(n--)
{
scanf("%d",&x);
c[x]++;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
read(n);
scanf("%d",&n);
read(n);
bool flag=false;
int j;
for(int i=0;i<MAX;i++)
{
j=c[i];
while(j--)
{
if(flag)putchar(' ');
printf("%d",i);
flag=true;
}
}
puts("");
}
return 0;
}
/*
1
1 3 10
*/
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<time.h>
#include<math.h>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
const int MAX=110000;
int c[MAX];
void read(int n)
{
int x;
while(n--)
{
scanf("%d",&x);
c[x]++;
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
read(n);
scanf("%d",&n);
read(n);
bool flag=false;
int j;
for(int i=0;i<MAX;i++)
{
j=c[i];
while(j--)
{
if(flag)putchar(' ');
printf("%d",i);
flag=true;
}
}
puts("");
}
return 0;
}
/*
1
1 3 10
*/
追问
谢谢你的回答,可不可以请你做一点点解释
追答
因为数字在0到10万之间,所以我们只要统计一下这些数字有几个,最后输出就行了。当然对于题目中说了的两个有序的数列,可以有O(n+m)的算法,就是每一次取两个数字中头最小的一个放到另一个数列中,然后那个头++,哪个小就哪个头++一直取完就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询