您的位置:首页 > 其它

pat1089 Insert or Merge

2015-02-26 17:24 302 查看
#include<algorithm>
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<climits>
#define eps 1e-9
#define ll long long
using namespace std;
int a[105],b[105],c[105];
int n;
int ok1()
{
	for(int i = 0;i<n;i++)if(a[i]!=c[i])return 0;
	return 1;
}
int ok2()
{
	for(int i = 0;i<n;i++)if(b[i]!=c[i])return 0;
	return 1;
}
void insert(int x)
{
	while(x>0&&a[x]<a[x-1])
	{
		swap(a[x],a[x-1]);
		x--;
	}
}
void merge(int x)
{
	for(int i = 0;i<n;i+=x)
		sort(b+i,b+i+min(x,n-i));
}
int main()
{	
	int i,j,x;
	while(cin>>n)
	{
		for(i = 0;i<n;i++)cin>>a[i];
		for(i = 0;i<n;i++)b[i] = a[i];
		for(i = 0;i<n;i++)cin>>c[i];
		int f = 0;
		for(i = 1;i<n;i++)
		{
			insert(i);
			merge((int)pow(2,i));
			if(ok1())
			{
				cout<<"Insertion Sort"<<endl;
				insert(min(i+1,n-1));
				for(j = 0;j<n-1;j++)cout<<a[j]<<" ";
				cout<<a[n-1];
				break;
			}
			if(ok2())
			{
				cout<<"Merge Sort"<<endl;
				merge((int)pow(2,i+1));
				for(j = 0;j<n-1;j++)cout<<b[j]<<" ";
				cout<<b[n-1];
				break;
			}
		}
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: