Pseudo-median problem

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

Guess you like

Origin blog.csdn.net/xiao_ma_nong_last/article/details/105602786