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. TOJ 4394 Rebuild Road

    描述 Once,in a kingdom,there are N cities.M roads have been buit such that from one city you can reach ...

  2. Linux kernel workqueue机制分析

    Linux kernel workqueue机制分析 在内核编程中,workqueue机制是最常用的异步处理方式.本文主要基于linux kernel 3.10.108的workqueue文档分析其基 ...

  3. Shell脚本检测程序,如果挂了就重启程序

    脚本如下: #!/bin/sh #要检查的进程名 PROGRESS_NAME="heihu_server" #----------------------------------- ...

  4. java中json解析,xml解析

    抓取网页内容,会返回json或者xml(html)格式的数据. 为了方便的对上述两种格式的数据进行解析,可采用解析工具. JsonPath https://github.com/jayway/Json ...

  5. SpringSecurity 3.2入门(3)单用户登录

    1.增加web.xml文件配置如下 <!-- 获取Spring Security session的生命周期,这个监听器会在 session 创建和销毁的时候通知 Spring Security ...

  6. IntelliJ IDEA 12 设置优化

    1.IntelliJ IDEA简介 IntelliJ IDEA是Eclipse之外又一强大的IDE,Google在今年发布了新的Android开发IDE---Android Studio就是基于Int ...

  7. 引爆你的Javascript代码进化 (转)

    转自 海玉的博客 方才在程序里看到一段JS代码,写法极为高明,私心想着若是其按照规范来写,定可培养对这门语言的理解,对JS编程能力提高必是极好的.说人话:丫代码写的太乱,看的窝火! 最近闲暇无事,准备 ...

  8. PHP性能检测与优化—XHProf 数据阅读

    PHP性能检测与优化—XHProf 数据阅读 一.      效果如下 请求总揽 函数调用情况 二.      参数含义 Inclusive Time              包括子函数所有执行时间 ...

  9. javascript实现数据结构与算法系列

    1.线性表(Linear list) 线性表--简单示例及线性表的顺序表示和实现 线性表--线性链表(链式存储结构) 线性表的静态单链表存储结构 循环链表与双向链表 功能完整的线性链表 线性链表的例子 ...

  10. 编程中遇到的Python错误和解决方法汇总整理

    这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下   开个贴,用于记录平时经常碰到的Python的错误同时对导致错误的原因进行分析, ...