四、阅读程序-3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <iostream> #include <algorithm> #include <vector> 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≤𝑎𝑖≤108,𝑛<=10000,1≤𝑘≤𝑛(𝑛−1)/2,完成下面的判断题和单选题:
