吴易璐
(我尊嘟很爱奥数欸(emo版)
1
好了回归正题
合并有序数组
题目
BH. 合并有序数组
Problem ID: 1206
Contest ID: 5697
必做题
Time Limit:1s Memory Limit: 256M
Description:
假设有两个非递增序列 A 与 B ,要求将它们合并为一个非递增序列 C 。
(不可使用任何排序算法完成)
Input:
第一行输入第一个非递增序列,以-1结尾。
第二行输入第二个非递增序列,以-1结尾。
Output:
输出合并后的非递增序列
Sample input:
8 5 4 -1
7 6 3 1 -1
Sample output:
8 7 6 5 4 3 1
约束: 每个序列中元素个数最多不超过100000 ,所有数字都在带符号的 32 位整数范围内(signed 32-bit integers)。
其实也有很认真看过tyx的解答
蠢笨如猪的我发现当时上课似乎。。
走神了!
所以dalao们
\Huge 救救孩子吧!!!
3 个赞
金杭东
(金杭东)
5
就是用一个数组把数字存起来(-1除外)
然后排序输出就好了
摘要
恭喜发财解决方案拿来
2 个赞
金杭东
(金杭东)
10
由于是有序的那就可以这样
#include<bits/stdc++.h>
using namespace std;
int a[1000001],b[1000001],c[1000001],i=1,j=1,n,m,t;
int main()
{
cin>>a[1];
while(a[n+1]!=-1)
{
n++;
cin>>a[n+1];
}
cin>>b[1];
while(b[m+1]!=-1)
{
m++;
cin>>b[m+1];
}
while(t!=n+m)
{
if(a[i]>=b[j]&&i<=n) c[++t]=a[i++];
else if(j<=m) c[++t]=b[j++];
}
for(i=1;i<=t;++i) cout<<c[i]<<" ";
return 0;
}
2 个赞
陈晟亦
(弈剑のㄨ听雨阁)
11
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[10001]={0},i=0,b[10001]={0},j=0,x=0,y=0;
while(scanf("%d",&a[i])){ //输入a数组
if(a[i]==-1) //如果是-1就退出
break; //退出
i++; //下标加一
}
while(scanf("%d",&b[j])){ //输入b数组
if(b[j]==-1) //如果是-1就退出
break; //退出
j++; //下标加一
}
while(1){ //双指针循环
if(a[x]>b[y]){ //如果大于
cout<<a[x]<<" "; //输出大的
x++; //将x指向a数组的下一个元素
}
else if(a[x]<b[y]){ //如果小于
cout<<b[y]<<" "; //输出更大的b[y]
y++; //将y指向b数组的下一个元素
}
else{ //如果相等
cout<<a[x]<<" "<<b[y]<<" "; //两者都输出
x++; //将x指向a数组的下一个元素
y++; //将y指向b数组的下一个元素
}
if(x==i&&y==j) //如果长度达到要求
break; //退出
}
return 0;
}
1 个赞