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. 03.if 和 switch结合练习

    namespace _04.练习01 { class Program { static void Main(string[] args) { //请用户输入年份,再输入月份,输出该月有多少天 Cons ...

  2. css 盒模型 文档流 几种清除浮动的方法

    盒模型 1.box-sizing: content-box 是普通的默认的一种盒子表现模式 盒子大小为 width + padding + border   content-box:此值为其默认值,其 ...

  3. Objective C 中的BOOL, bool, Boolean理解

    一. 1.类型不同 BOOL为int型 bool为布尔型 2.长度不同 bool只有一个字节 BOOL长度视实际环境来定,一般可认为是4个字节 3.取值不同 bool取值false和true,是0和1 ...

  4. 原生js实现星星闪烁的效果

    星星闪烁的原理其实很简单: html代码: <body style="background:#000"> <div id="stars_box" ...

  5. struts2.5框架使用通配符无效问题

    错误: Struts has detected an unhandled exception: Messages: There is no Action mapped for namespace [/ ...

  6. 简谈 Java 中的泛型通配符

    很好的一篇文章https://zhuanlan.zhihu.com/p/26681625

  7. java面试题之----get和post请求方法的区别

    GET和POST两种基本请求方法的区别 GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过req ...

  8. 初识 visJs (基于html5 canvas开发的可视化框架)

    本文参考 https://github.com/almende/vis 编写并且自己总结各种快捷方式,意在帮助开发可视化图表的前端朋友快速了解visJs. vis.js Vis.js是一个基于浏览器的 ...

  9. day2-基础 变量,判断,循环

    1.第一个程序 print ("Hello World!") 输出: 1 Hello World 2.第一个变量 a = ( print (a) 输出: Hello World 3 ...

  10. OC 构造方法

    #import <Foundation/Foundation.h> @interface Student : NSObject { int _age; int _no; } - (void ...