zoukankan      html  css  js  c++  java
  • PAT1089. Insert or Merge

    PAT1089. Insert or Merge

    题目大意

    给定一个初始序列src, 一个排序当中的序列tar, 问排序方式是 Insert Sort, 或者 Merge Sort. 并输出下一次迭代排序的序列, 保证答案唯一.

    思路

    由于保证了答案的唯一性, 所以先检测是否是 Insert Sort, 只要检测第一个出现不递增的序列的位置之后, src 和 tar 是否相等.

    如果是 Merge Sort, (需要注意此处的 Merge Sort 不是二分实现的), 需要自己手动模拟 Merge Sort 的过程, 这里考察一个 按照 k 的大小分割一个区间

    	for(int i = 0; i < n / k; i++)
    	    func(i + k, (i + 1) * k);
    	func(n / k * k, n);
    

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int nNum;
    vector<int> src, tar;
    bool eq(){
        for(int i = 0; i < nNum; i++)
            if(src[i] != tar[i])
                return false;
        return true;
    }
    int main(){
        scanf("%d", &nNum);
        src.resize(nNum); tar.resize(nNum);
        int i, j;
        for(i = 0; i < nNum; i++) cin >> src[i];
        for(i = 0; i < nNum; i++) cin >> tar[i];
    
        for(i = 0; i < nNum - 1 && tar[i] <= tar[i + 1]; i++);
        for(j = i + 1; j < nNum && tar[j] == src[j]; j++);
    
        if(j == nNum){
            cout << "Insertion Sort" << endl;
            sort(src.begin(), src.begin() + i + 2);
        }
        else{
            cout << "Merge Sort" << endl;
            int k = 1, flag = 1;
            while(flag){
                flag = !eq();
                k *= 2;
                for(int i = 0; i < nNum / k; i++)
                    sort(src.begin() + i * k, src.begin() + (i + 1) * k);
                sort(src.begin() + nNum / k * k, src.end());
            }
        }
        for(int i = 0; i < nNum; i++){
            printf("%s%d", i == 0 ? "" : " ", src[i]);
        }
        return 0;
    }
    
    
    
    
  • 相关阅读:
    JS定时执行,循环执行
    Ecshop(二次开发)
    百度歌曲接口
    给大家讲讲在哪些地方发外链最好
    360浏览器默认以兼容模式或急速模式方式打开页面
    子iframe 怎么调用 父级的JS函数
    ASP 发送邮件
    PHP发送邮件
    php表单数据验证类
    js获取url传递参数
  • 原文地址:https://www.cnblogs.com/1pha/p/7905923.html
Copyright © 2011-2022 走看看