小数学脑筋急转弯
某比赛已经进入了淘汰赛阶段,已知共有n名选手参与了此阶段比赛,他们的得分分别是a_1,a_2….a_n,小美作为比赛的裁判希望设定一个分数线m,使得所有分数大于m的选手晋级,其他人淘汰。
但是为了保护粉丝脆弱的心脏,小美希望晋级和淘汰的人数均在[x,y]之间。
显然这个m有可能是不存在的,也有可能存在多个m,如果不存在,请你输出-1,如果存在多个,请你输出符合条件的最低的分数线。
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
vector<int> an;
int main() {
int ai, n;
int min, max;
cin >> n >> min >> max;
if (min > max)
swap(min, max);
for (int i = 0; i < n; i++) {
cin >> ai;
an.push_back(ai);
}
sort(an.begin(), an.end());
if (2 * min > n || 2 * max < n) {
cout << -1 << endl;
return 0;
}
vector<int>::iterator itmin = an.begin() + min - 1;
vector<int>::iterator itmax = an.begin() + max - 1;
vector<int>::iterator itrmin = an.end() - min - 1;
vector<int>::iterator itrmax = an.end() - max - 1;
int result[4] = {*itmin, *itmax, *itrmin, *itrmax};
sort(result, result + 4);
cout << result[1] << endl;
return 0;
}