题目链接:点击打开链接
题目大意:略。
解题思路:
1、先检验是否插入,否则就是归并。
2、用 sort 来替代插入和归并排序。
3、注意注意注意:中间两个数相等的情况下,也算排好序,第4个测试点(搞死人了)。

AC 代码
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;
}









