1089 Insert or Merge (25 分)难度: 一般 / 知识点: 模拟

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1089 Insert or Merge (25 分)难度: 一般 / 知识点: 模拟相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805377432928256

#include<bits/stdc++.h>
using namespace std;
const int N=1e5*3+10;
int n,x,flag;
vector<int>a,b,c;
void solve1()
{
    c=a;
    for(int i=1;i<n;i++)
    {
        int j=i;
        while(j&&c[j-1]>c[j]) swap(c[j-1],c[j]),j--;
        if(c==b) 
        {
            flag=true;
            int j=i+1;
            while(j&&c[j-1]>c[j]) swap(c[j-1],c[j]),j--;
            break;
        }
    }
}
void solve2()
{
    c=a;
    for(int i=2;i<=n;i*=2)
    {
        for(int j=0;j+i<=n;j+=i) sort(c.begin()+j,c.begin()+j+i);
        if(n%i) sort(c.begin()+n/i*i,c.end());
        if(c==b)
        {
            i=i*2;
            for(int j=0;j+i<=n;j+=i) sort(c.begin()+j,c.begin()+j+i);
            if(n%i) sort(c.begin()+n/i*i,c.end());
            break;
        }
    }
}
int main(void)
{
    cin>>n;
    for(int i=0;i<n;i++) cin>>x,a.push_back(x);
    for(int i=0;i<n;i++) cin>>x,b.push_back(x);
    solve1();
    if(flag) puts("Insertion Sort");
    else
    {
        solve2();
        puts("Merge Sort");
    }
    for(int i=0;i<c.size();i++) 
    {
        cout<<c[i];
        if(i+1!=c.size()) cout<<" ";
    }
    return 0;
}

以上是关于1089 Insert or Merge (25 分)难度: 一般 / 知识点: 模拟的主要内容,如果未能解决你的问题,请参考以下文章

PAT甲级:1089 Insert or Merge (25分)

PAT 1089. Insert or Merge (25)

1089. Insert or Merge (25)排序——PAT (Advanced Level) Practise

1089. Insert or Merge (25)排序——PAT (Advanced Level) Practise

PAT (Advanced Level) 1089. Insert or Merge (25)

1089 Insert or Merge (25 分)难度: 一般 / 知识点: 模拟