← 查看本卷题目
组合题6 个小题
已作答 0 / 6
#include <vector>#include <algorithm>#include <iostream> using namespace std; bool f0(vector<int> &a, int m, int k) {    int s = 0;    for (int i = 0, j = 0; i < a.size(); i++) {        while (a[i] - a[j] > m) j++;        s += i - j;    }    return s >= k;} int f(vector<int> &a, int k) {    sort(a.begin(), a.end());     int g = 0;    int h = a.back() - a[0];    while (g < h) {        int m = g + (h - g) / 2;        if (f0(a, m, k)) {            h = m;        }        else {            g = m + 1;        }    }     return g;} int main() {    int n, k;    cin >> n >> k;    vector<int> a(n, 0);    for (int i = 0; i < n; i++) {        cin >> a[i];    }    cout << f(a, k) << endl;    return 0;}

假设输入总是合法的且 1≤ai≤108,n≤10000,1≤k≤n(n−1)21 \le a_i \le 10^8, n \le 10000, 1 \le k \le \dfrac {n(n-1)} 2,完成下面的判断题和单选题:

第30题判断题原卷 1.5 分

当输入为 5 7 2 -4 5 1 -3,输出为 5。()

填写答案