问题标题: 酷町堂:3900

0
0
已解决
黄子澄
黄子澄
中级天翼
中级天翼

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;

}


0
已采纳
王子健
王子健
初级天翼
初级天翼

归并比快排要快很多,你学过归并排序吗???

王子健在2020-08-01 22:05:27追加了内容

1、将两个已经有序数组合并成一个,拿两个数组的第一个数字进行比较,小的数字放入新数组,一直重复
2、直到有一个数组为空,将另一个数组剩下的数字接到后面。

0
0
刘英杰
刘英杰
新手天翼
新手天翼

虽然你攻击我

但是我还是要帮助每个把酷町问答当做编程问答的人(doge)

你这个显然不对

sort排序是肯定会超时的

这道题属于经典的归并排序

其算法核心为将两个数组拆解为更多的小数组

然后再将每个小数组一一合并

最后再输出

0
黄子扬
黄子扬
初级天翼
初级天翼

归并排序,贴个板子,自己改

#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;
}

 

0
王俊杰
王俊杰
高级光能
高级光能

用void试试,这题我也你没写出来,终极办法问老师~~

我要回答