0
点赞
收藏
分享

微信扫一扫

PAT (Basic Level) Practice (中文)- 1035 插入与归并(25 分)


题目链接:​​点击打开链接​​

题目大意:略。

解题思路:

1、先检验是否插入,否则就是归并。

2、用 sort 来替代插入和归并排序。

3、注意注意注意:中间两个数相等的情况下,也算排好序,第4个测试点(搞死人了)。

PAT (Basic Level) Practice (中文)- 1035 插入与归并(25 分)_ACM

AC 代码

#include<bits/stdc++.h>
#include<cmath>

#define mem(a,b) memset(a,b,sizeof a);
#define INF 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn=110;

int n;
int a[maxn], b[maxn];

void Insertion_Sort(int last)
{
sort(b,b+last);
}

void Merge_Sort(int t[],int len)
{
for(int i=0;i<n;i+=len)
if(i+len<=n) sort(t+i,t+i+len);
else sort(t+i,t+n);
}

int eq()
{
for(int i=0;i<n;i++) if(a[i]!=b[i]) return 0;
return 1;
}

int main()
{
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(int i=0;i<n;i++) scanf("%d",&b[i]);

int l=1;
for(int i=1;i<n;i++)
if(b[i] >= b[i-1]) l++; // 千万别忘记等号的情况,第四个测试点专搞你这个
else break;

int f=1;
for(int i=l;i<n;i++) if(a[i]!=b[i]){ f=0; break; }

if(f)
{
puts("Insertion Sort");
Insertion_Sort(l+1);
}
else
{
puts("Merge Sort");
for(int i=2;i<=n;i*=2)
if(eq()){ Merge_Sort(b,i); break; }
else Merge_Sort(a,i);
}

printf("%d",b[0]);
for(int i=1;i<n;i++) printf(" %d",b[i]);
puts("");
}

return 0;
}


举报

相关推荐

0 条评论