版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oytf10001/article/details/88594494
K小数
题目描述
这是一道很简单的问题。
给你一个长度为 n
的序列 a1,a2,...,an,求这个序列的第 k 小的数。k 小数的定义为:将 a 从小到大排序后第 k 个位置的值。 由于输入数据量过大,输入只给出a1的值,并采用如下递推式生成剩余数据: ai=(pai−1+q)modM(1<i≤n) 其中,mod 运算的含义是:amodb 的值为 a 除以 b
得到的余数。
输入格式
输入第一行为两个正整数 n,k
,含义见描述。
第二行为四个非负整数 a1,p,q,M
,你需要根据题目中给出式子计算完整序列。
输出格式
输出一行一个正整数,表示第原序列第 k
小的数。
输入样例1
5 4
6 7 5 10
输出样例1
6
样例2
点此下载
数据范围
对于 20% 的数据,n≤102
;
对于40% 的数据,n≤104
;
对于 60% 的数据,n≤106
;
对于100% 的数据,1≤k≤n≤3×107
,输入中其它数都在 int 范围内。
提示
本题没有开启 STL,也就是说你不能使用 std::sort。
[ 但是可以采用类似快排的思想,线性解决本题 ]
为了帮助大家完成题目,我们提供了只包含了输入输出功能的程序模板,也提供了含有算法的大部分实现细节的程序。
你可以根据自己的实际情况,在这些程序的基础上进行作答,或不参考这些程序,这将与你的得分无关。
这些程序可以从【这里】下载。
特别提醒:对于 Java 语言,在提交时请删除程序中的所有中文字符,否则可能无法通过编译。