这是一道交互题。
Old Pigeon是一名神仙OI选手,在鸽国信息学冬令营PWC2017 Challenge一题中仅用
进入鸽华大学后,他遇到了这样一道数据结构课习题:给你
在PWC2017中获得狗牌的ljt12138想知道,如果你有一只这样的排序鸽,可以在多少次比较之内将
任务介绍
你需要实现一个函数sort(int id, int n, int k, int *a)
:
为传入的子任务编号; 为序列长度; 为排序鸽允许的最大排序个数; 为传出答案的数组。
你需要将排序后第
举例而言,如果待排序的数组
在每个测试点中,交互库都会调用恰好一次sort
函数。
你可以调用函数super_sort(int *a, int len, int *b)
来请求排序鸽为你排序:
表示待排序的数的个数,要求 ; 传入待排序的数在原数列中的位置,且 ; 传出排好序的数在原数列中的位置,即 是 的一个排列,且对于任意的 , 。
实现方法
本题只支持C++。
源代码中需要包含头文件sort.h
。
你需要实现的函数sort
:
void sort(int id, int n, int k, int *a);
函数super_sort
的接口信息如下:
void super_sort(int *a, int len, int *b);
如何测试你的程序
你需要在本题目录下使用如下命令编译得到可执行程序:
g++ grader.cpp sort.cpp -o sort -O2
可执行文件将从标准输入读取以下格式的数据:
第一行包含六个数:
,其中 为子任务编号, 为排序数组长度, 为排序鸽每次能排序的最长长度, 为评分参数,将在子任务中解释用处。第二行包含
个数: ,表示待排序的数组。 应该是 的一个排列,表示待排序的数组。
交互库将会输出以下信息:
- 如果数组成功排序,输出一行形如"cmp_cnt = cnt",表示你调用super_sort的次数
- 否则,将输出对应的错误信息。
如果输入数据不合法,交互库可能不能正常运行。
你可以参考下发的交互库了解更多的信息。
样例源代码
按照上文中提到的方式进行编译,即能通过编译得到可执行程序。
样例源代码只是帮助理解题目,结果不一定正确。
由于提供了交互式验证答案正确性的方法,本题不提供输出样例。
样例一
input
0 8 2 100 1000 10000
2 1 0 3 4 6 5 7
注意: 样例中的
限制及约定
Subtask1(8分):
Subtask2(24分):
Subtask3(68分):
对于每个子任务,设c = cmp_cnt
:
- 如果
,将获得子任务全部的分数; - 如果
,将获得子任务一半的分数; - 如果
,将获得子任务四分之一的分数; - 如果
或没有成功排序,将不会获得任何分数,并被暴躁的排序鸽D一番。
时间限制:
空间限制:
题目中所给的时间、空间限制为你的代码和交互库加起来可以使用的时间和空间。我们保证,对于任何合法的数据及在限制范围内的调用,任何版本的交互库(包括下发给选手的和最终评测使用的),运行所用的时间不会超过0.5s,运行所用的空间不会超过12MB,也就是说,选手实际可用的时间至少为1.5s,实际可用的空间至少为500MB。