The pseudo-median of n numbers is defined as the [(n + 1)/2]th number after sorting from small to large. Among them, [x] means x is rounded down.
Now, given you n numbers, you need to add the least number to them so that k becomes the pseudo-median of the last set of numbers.
May I ask the minimum number you need to join
/* 输入第一行包含两个数n,k,意为原来数的个数和最后的伪中位数。
接下来一行输入n个数,空格隔开,代表原来的数
思路:将输入的数先进行排序,找到k这个数在原来的数中的位置begin,end(因为k在原来的数中可能会重复,所以找到起始位置和终止位置)
分三种情况讨论:
1.伪中位数在begin和end区间内
2.伪中位数在begin和end区间左边
3.伪中位数在begin和end区间右边
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int getIncreasedQuantity(vector<int>& datas, int n, int k) {
int mid = ((n + 1) / 2) + ((n + 1) % 2);
int begin = -1;
int end = 0;
for (int i = 0; i < n; i++) {
if (datas.at(i) == k) {
begin = (begin == -1) ? i : begin;
end = i;
}
}
begin++;
end++;
return (mid - begin) >= 0 && (mid - end) <= 0 ? 0 :
(mid - end) > 0 ? (mid - end) : (begin - mid);
}
int main() {
int n = 0;
int k = 0;
cin >> n >> k;
vector<int> datas;
for (int i = 0; i < n; i++) {
int data;
cin >> data;
datas.push_back(data);
}
sort(datas.begin(), datas.end());
cout << getIncreasedQuantity(datas, n, k) << endl;
system("pause");
return 0;
}
If there is any infringement, please contact to delete it. If there is an error, please correct me, thank you