中级天翼
3900:归并数组
Time Limit Exceeded:80分代码共享
黄子澄的测评结果:
测试点
结果
时间
1
Accepted
808ms
偷看一下数据
2
Accepted
828ms
偷看一下数据
3
Accepted
232ms
偷看一下数据
4
Accepted
480ms
偷看一下数据
5
Accepted
820ms
偷看一下数据
6
Time Limit Exceeded
1340ms
偷看一下数据
7
Accepted
652ms
偷看一下数据
8
Accepted
416ms
偷看一下数据
9
Accepted
772ms
偷看一下数据
10
Time Limit Exceeded
1264ms
偷看一下数据
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<iomanip>
#include<sstream>
using namespace std;
long long a[2000005];
int main(){
long long n,m;
cin>>n;
for(long long i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(long long i=n+1;i<=n+m;i++){
cin>>a[i];
}
sort(a+1,a+1+n+m);
for(long long i=1;i<=n+m;i++){
cout<<a[i]<<" ";
}
return 0;
}
初级天翼
归并比快排要快很多,你学过归并排序吗???
王子健在2020-08-01 22:05:27追加了内容
1、将两个已经有序数组合并成一个,拿两个数组的第一个数字进行比较,小的数字放入新数组,一直重复
2、直到有一个数组为空,将另一个数组剩下的数字接到后面。
新手天翼
虽然你攻击我
但是我还是要帮助每个把酷町问答当做编程问答的人(doge)
你这个显然不对
sort排序是肯定会超时的
这道题属于经典的归并排序
其算法核心为将两个数组拆解为更多的小数组
然后再将每个小数组一一合并
最后再输出
初级天翼
归并排序,贴个板子,自己改
#include<iostream>
#include<cstdio>
using namespace std;
int t[100005],s[100005];
void MergeSort(int l,int r)
{
if(l==r) return;
int mid=(l+r)/2;
MergeSort(l,mid);
MergeSort(mid+1,r);
int p=l,q=mid+1,i=l;
while(p<=mid&&q<=r)
{
if(s[p]<s[q])
t[i++]=s[p++];
else
t[i++]=s[q++];
}
while(p<=mid)
t[i++]=s[p++];
while(q<=r)
t[i++]=s[q++];
for(int i=l;i<=r;i++)
s[i]=t[i];
}
int main()
{
int i,n;
cin>>n;
for(i=1;i<=n;i++)
scanf("%d",&s[i]);
MergeSort(1,n);
for(i=1;i<=n;i++)
printf("%d ",s[i]);
printf("\n");
return 0;
}