当前位置:网站首页>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也就迎刃而解。
边栏推荐
- Altium Designer 19.1.18 - 更改铺铜的透明度
- A series of problems in offline installation of automated test environment (ride)
- Rough notes of C language (2) -- constants
- deepin 20 kivy unable to get a window, abort
- cygwin
- Explain STM32 startup file in detail
- I 用c l 栈与队列的相互实现
- Rename directory in C [closed] - renaming a directory in C [closed]
- UE5热更新-远端服务器自动下载和版本检测(SimpleHotUpdate)
- static的作用
猜你喜欢
611. Number of effective triangles
CADD课程学习(6)-- 获得已有的虚拟化合物库(Drugbank、ZINC)
I 用c l 栈与队列的相互实现
Today, share the wonderful and beautiful theme of idea + website address
About the problem that MySQL connector net cannot be cleared in MySQL
Numpy——1. Creation of array
行测--资料分析--fb--高照老师
With the help of Navicat for MySQL software, the data of a database table in different or the same database link is copied to another database table
Acwing-宠物小精灵之收服-(多维01背包+正序倒序+两种形式dp求答案)
The mutual realization of C L stack and queue in I
随机推荐
NSIS search folder
Use of orbbec Astra depth camera of OBI Zhongguang in ROS melody
Calibre garbled
Let me teach you how to develop a graphic editor
[MySQL] database knowledge record
Simple operation with independent keys (hey, a little fancy) (keil5)
611. Number of effective triangles
[untitled]
Idea push project to code cloud
editplus
Opendrive record
Daily Practice:Codeforces Round #794 (Div. 2)(A~D)
[idea] common shortcut keys
RF ride side door processing of prompt box
Use stm32cubemx tool to write the demo program of FreeRTOS
Play with grpc - go deep into concepts and principles
How to deal with excessive memory occupation of idea and Google browser
Apple system shortcut key usage
Numpy——1.数组的创建
Professional knowledge of public security -- teacher bilitong