首页 > 学院 > 开发设计 > 正文

1035. 插入与归并(25) PAT乙级&&1089. Insert or Merge (25)PAT甲级

2019-11-10 18:35:30
字体:
来源:转载
供稿:网友

甲级传送门

乙级传送门

#include<stdio.h>#include<algorithm>#define MAX_N 110using namespace std;int n;int aim[MAX_N];int ins[MAX_N];int merg[MAX_N];bool isSame(int a[],int b[]){ bool flag=true; for(int i=0;i<n;i++){ if(a[i]!=b[i]){ flag=false; return false; } } return true;}void show(int a[]){ for(int i=0;i<n;i++){ PRintf("%d",a[i]); if(i!=n-1) printf(" "); } printf("/n");}bool insert(){ bool flag=false; for(int i=1;i<n;i++){ if(i!=1&&isSame(ins,aim)){ flag=true; } int key=ins[i]; int j=i; while(j>0&&ins[j-1]>key){ ins[j]=ins[j-1]; j=j-1; } ins[j]=key; if(flag){ return true; } } return false;} void mergesort(){ bool flag=false; for(int i=2;i/2<=n;i*=2){ if(i!=2&&isSame(aim,merg)){ flag=true; } for(int j=0;j<n;j+=i){ sort(merg+j,merg+min(j+i,n)); } if(flag){ show(merg); return ; } }}int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&ins[i]); merg[i]=ins[i]; } for(int i=0;i<n;i++){ scanf("%d",&aim[i]); } if(insert()){ printf("Insertion Sort/n"); show(ins); } else{ printf("Merge Sort/n"); mergesort(); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表