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;
}

PAT1089. Insert or Merge的更多相关文章

  1. pat1089. Insert or Merge (25)

    1089. Insert or Merge (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Accor ...

  2. PAT甲级1089. Insert or Merge

    PAT甲级1089. Insert or Merge 题意: 根据维基百科: 插入排序迭代,消耗一个输入元素每次重复,并增加排序的输出列表.每次迭代,插入排序从输入数据中删除一个元素,在排序列表中找到 ...

  3. PTA Insert or Merge

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  4. 60. Insert Interval && Merge Intervals

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  5. 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  6. PAT 1089 Insert or Merge[难]

    1089 Insert or Merge (25 分) According to Wikipedia: Insertion sort iterates, consuming one input ele ...

  7. PTA 09-排序2 Insert or Merge (25分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/675 5-13 Insert or Merge   (25分) According to ...

  8. Insert or Merge

    7-13 Insert or Merge(25 分) According to Wikipedia: Insertion sort iterates, consuming one input elem ...

  9. PAT_A1089#Insert or Merge

    Source: PAT A1089 Insert or Merge (25 分) Description: According to Wikipedia: Insertion sort iterate ...

随机推荐

  1. django细节

    1.处理请求 1.1  /add/?a=4&b=5 这样GET方法进行[获取参数] from django.shortcuts import render from django.http i ...

  2. PAT 1024 Palindromic Number

    #include <cstdio> #include <iostream> #include <cstdlib> #include <algorithm> ...

  3. python unix时间戳

    这是第一次用着python感到怒了,从datetime转化到timestamp数值居然没有直接的函数 直接获取当前时间戳倒是方便: import time timestamp = time.time( ...

  4. 洛谷P2312 解方程(暴力)

    题意 题目链接 Sol 出这种题会被婊死的吧... 首先不难想到暴力判断,然后发现连读入都是个问题. 对于\(a[i]\)取模之后再判断就行了.注意判断可能会出现误差,可以多找几个模数 #includ ...

  5. 向jsp页面传值时出现乱码

    在一个html页面中用表单向jsp页面传值: 这是html页面 <html> <head> <title>MyBeans.html</title> &l ...

  6. blog test

    try my first blog by cnblog. i will record my learn experence in the future.

  7. SharePoint2010 HTTP Error 503. The service is unavailable 解决方法

    1.更改系统管理员用户密码前提 因为更改系管理员用户密码会影响到 "SharePoint2010"正常运行,所在尽量不要更改系统管理员用户的密码, 必须更改密码的话,需要注意以两点 ...

  8. Python装饰器AOP 不定长参数 鸭子类型 重载(三)

    1 可变长参数与关键字参数 *args代表任意长度可变参数 **kwargs代表关键字参数 用*args和**kwargs只是为了方便并没有强制使用它们. 缺省参数即是调用该函数时,缺省参数的值若未被 ...

  9. IEEP-网络设计

    IEEP-网络设计 网络设计概述 网络设计概述 1.负责把网络规划阶段获得的客户需求运用技术手段予以规范化体现 2.网络设计一般遵循模块化指导方针,分模块进行设计 3.网络设计的输出成果必须是规范的. ...

  10. 源码安装mysql,及主从同步

    源码安装mysql [可选] 如果用源码安装cmake软件: cd /home/oldboy/tools/ tar xf cmake-.tar.gz cd cmake- ./configure #CM ...