1089. Insert or Merge (25)

来源:互联网 发布:java中的wait 编辑:程序博客网 时间:2024/05/17 07:36

传送门:https://www.patest.cn/contests/pat-a-practise/1089

AC 代码

#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>#include <queue>#include <string.h>#include <unordered_map>#include <map>using namespace std;int main(){    int n;    scanf("%d",&n);    vector<int>initSequence(n),targetSequence(n);    for (int i=0; i<n; ++i)        scanf("%d",&initSequence[i]);    for (int i=0; i<n; ++i)        scanf("%d",&targetSequence[i]);    bool IsMerge = false;    int value = 1;    vector<int>nextSequence = initSequence;    while (true) {        value = value *2;        if(value>n)            value = n;        for (int i=0; i<n;) {            int end = i+value;            if(end>n)                end = n;            sort(nextSequence.begin()+i, nextSequence.begin()+end);            i = end;        }        if(nextSequence==targetSequence){            IsMerge = true;            value = value *2;            if(value>n)                value = n;            for (int i=0; i<n;) {                int end = i+value;                if(end>n)                    end = n;                sort(nextSequence.begin()+i, nextSequence.begin()+end);                i = end;            }            break;        }        if(value>=n)            break;    }    if(IsMerge){        printf("Merge Sort\n");    }else{        printf("Insertion Sort\n");        int pos = n-1;        for (int i=n-1;i>=0;--i) {            if(targetSequence[i]==initSequence[i])                pos--;            else                break;        }        nextSequence = targetSequence;        for (int i=pos+1; i<=n; ++i) {            sort(nextSequence.begin(), nextSequence.begin()+i);            if(nextSequence!=targetSequence)                break;        }    }    for (int i=0; i<nextSequence.size(); ++i) {        printf(i==nextSequence.size()-1?"%d\n":"%d ",nextSequence[i]);    }    return 0;}


0 0
原创粉丝点击