AcWing 1579. 插入还是归并
原题链接
中等
作者:
leo123456
,
2020-08-20 17:20:40
,
所有人可见
,
阅读 619
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=110;
int n;
int a[N],b[N];
bool check()
{
for(int i=0;i<n;i++)
if(a[i]!=b[i])
return false;
return true;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
int k=0;
while(b[k+1]>=b[k]) k++;
bool match=true;
for(int i=k+1;i<n;i++)
if(a[i]!=b[i])
{
match=false;
break;
}
if(match)
{
cout<<"Insertion Sort"<<endl;
sort(b,b+k+2);
cout<<b[0];
for(int i=1;i<n;i++) cout<<' '<<b[i];
cout<<endl;
}
else
{
cout<<"Merge Sort"<<endl;
int step=1;
while(true)
{
bool match=check();
step*=2;
for(int i=0;i<n;i+=step)
sort(a+i,a+min(n,i+step));
if(match) break;
}
cout<<a[0];
for(int i=1;i<n;i++) cout<<' '<<a[i];
cout<<endl;
}
return 0;
}