当前位置:网站首页>1089 Insert or Merge 含测试点5
1089 Insert or Merge 含测试点5
2022-07-05 07:43:00 【好好学吧867】
According to Wikipedia:
Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain.
Merge sort works as follows: Divide the unsorted list into N sublists, each containing 1 element (a list of 1 element is considered sorted). Then repeatedly merge two adjacent sublists to produce new sorted sublists until there is only 1 sublist remaining.
Now given the initial sequence of integers, together with a sequence which is a result of several iterations of some sorting method, can you tell which sorting method we are using?
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤100). Then in the next line, N integers are given as the initial sequence. The last line contains the partially sorted sequence of the N numbers. It is assumed that the target sequence is always ascending. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in the first line either "Insertion Sort" or "Merge Sort" to indicate the method used to obtain the partial result. Then run this method for one more iteration and output in the second line the resuling sequence. It is guaranteed that the answer is unique for each test case. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
Sample Input 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
Sample Output 1:
Insertion Sort
1 2 3 5 7 8 9 4 6 0
Sample Input 2:
10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6
Sample Output 2:
Merge Sort
1 2 3 8 4 5 7 9 0 6
鸣谢用户 木子 补充数据!
代码长度限制
16 KB
时间限制
200 ms
内存限制
题目大意:判断是归并排序还是插入排序。
插入排序好判断,其原理就是把前几个元素依此排序好,所以插入排序后几个元素是没有排好的,所以我们根据这一点来判断是否为插入排序,不是插入排序的就是归并排序,归并排序的话,就按照模拟的进行把,实际上二者均可模拟,时间充足。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[101];
int b[101];
int n;
int work[101];
bool issame(){//判断数组是否相同
int i;
for(i=0;i<n;i++){
if(b[i]!=work[i])return false;
}
return true;
}
void merge(int l,int r,int sz){//归并排序l+sz,是左边序列的范围。
int i;
int start=l;
int temp[n];
for(i=0;i<n;i++)temp[i]=work[i];
int k=min(l+sz,r-1);
int u=min(r+sz,n-1);
while(l<=k&&r<=u){
if(temp[l]<=temp[r])work[start++]=temp[l++];
else work[start++]=temp[r++];
}
while(l<=k){
work[start++]=temp[l++];
}
while(r<=u){
work[start++]=temp[r++];
}
return ;
}
int main(){
scanf("%d",&n);
int i;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
work[i]=a[i];
}
for(i=0;i<n;i++){
scanf("%d",&b[i]);
}
for(i=0;b[i]<=b[i+1];i++);//找到第一个不相同的元素
sort(work,work+i+1);
if(issame()){
printf("Insertion Sort\n");
sort(work,work+i+2);
for(i=0;i<n;i++){
if(i!=0)printf(" ");
printf("%d",work[i]);
}
system("pause");
return 0;
}
printf("Merge Sort\n");
int j;
for(i=0;i<n;i++)work[i]=a[i];
for(i=1;i<n/2;i*=2){//i为规模
for(j=0;j<n;j+=2*i){//j为左边界
if(j+i<n)merge(j,j+i,i-1);
else merge(j,(j+n)/2,(n-j)/2);//防止越界
}
if(issame()){//找到和原始序列相同的重新排一下。
i*=2;
for(j=0;j<n;j+=2*i){
merge(j,j+i,i-1);
}
for(j=0;j<n;j++){
if(j!=0)printf(" ");
printf("%d",work[j]);
}
system("pause");
return 0;
}
}
system("pause");
}在过程中测试点5错误,原因就是没有对边界进行讨论, else merge(j,(j+n)/2,(n-j)/2);//防止越界,该语句就很好的解决了这一问题。
测试点5的测试样例
10
3 1 2 8 7 5 9 4 6 0
1 2 3 4 5 7 8 9 0 6
运行结果:
Merge Sort
0 1 2 3 4 5 6 7 8 9
我是通过调试发现问题的,如果不对边界进行限制,调试中会出现随意值的情况,改正之后测试点5也就迎刃而解。
边栏推荐
- [MySQL] database knowledge record
- GPIO circuit principle of stm32
- Idea to view the source code of jar package and some shortcut keys (necessary for reading the source code)
- Apple input method optimization
- Matrix keyboard scan (keil5)
- Numpy——1. Creation of array
- STM32 knowledge points
- Realization of binary relation of discrete mathematics with C language and its properties
- Apple animation optimization
- Linked list (establishment, deletion, insertion and printing of one-way linked list)
猜你喜欢

High end electronic chips help upgrade traditional oil particle monitoring

Daily Practice:Codeforces Round #794 (Div. 2)(A~D)

Use of orbbec Astra depth camera of OBI Zhongguang in ROS melody

Unforgettable summary of 2021

CADD课程学习(5)-- 构建靶点已知的化合结构(ChemDraw)

Thunderbird tutorial \ easy to use mail client

Play with grpc - go deep into concepts and principles

Differences between pycharm and idle and process -- join() in vs Code

Realization of binary relation of discrete mathematics with C language and its properties

Could NOT find XXX (missing: XXX_LIBRARY XXX_DIR)
随机推荐
Opendrive record
SQL JOINS
611. Number of effective triangles
Use go language to read TXT file and write it into Excel
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
Simple operation of running water lamp (keil5)
Query the table name used by kettle in Oracle
[untitled]
Charles- unable to grab bags and surf the Internet
Basic operation of external interrupt (keil5)
C language uses arrays to realize the intersection, union, difference and complement of sets
[MySQL] database knowledge record
Unforgettable summary of 2021
行测--资料分析--fb--高照老师
Openxlsx field reading problem
Numpy——1.数组的创建
Deepin, help ('command ') output saved to file
Pagoda create multiple sites with one server
Apple terminal skills
mysql 盲注常见函数