← 查看本卷题目
组合题6 个小题
已作答 0 / 6
#include <iostream>#include <cstdlib>using namespace std; int n;int d[10000]; int find(int L, int R, int k) {    int x = rand() % (R - L + 1) + L;    swap(d[L], d[x]);    int a = L + 1, b = R;    while (a < b) {        while (a < b && d[a] < d[L])            ++a;        while (a < b && d[b] >= d[L])            --b;        swap(d[a], d[b]);    }    if (d[a] < d[L])        ++a;    if (a - L == k)        return d[L];    if (a - L < k)        return find(a, R, k - (a - L));    return find(L + 1, a - 1, k);} int main() {    int k;    cin >> n;    cin >> k;    for (int i = 0; i < n; ++i)        cin >> d[i];    cout << find(0, n - 1, k);    return 0;}

假设输入的 n,kn,k 和 d[i]d[i] 都是不超过 1000010000 的正整数,且 kk 不超过 nn,并假设 rand() 函数产生的是均匀的随机数,完成下面的判断题和单选题:

第23题判断题原卷 1.5 分

将第 1919 行的 d[a] 改为 d[b],程序不会发生运行错误。( )

填写答案