题面
本题难度中等,记小于 \(x\) 的个数为 \(x_l\),大于 \(x\) 的个数为 \(x_r\),则等于 \(x\) 的个数为 \(c = n - x_l - x_r\)。如果 \(|x_l - x_r| \geqslant c\) 说明需要可以把 \(c-1\) 个 \(x\) 全分给其中一边,不够的再添加新的元素,否则说明需要 \(x\) 分配给左右两边,具体来说,先分给其中一边使得两边的数量相同,剩下中间的元素 \(x\) 会有多个,那么再平均分给两边,要保证总个数必须是奇数,那么中间剩下的元素个数为偶数就需要再添加一个元素。
代码实现
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
int main() {
int n, x;
cin >> n >> x;
int cntl = 0, cntr = 0, cntx = 0;
rep(i, n) {
int a;
cin >> a;
if (a > x) cntr++;
if (a < x) cntl++;
if (a == x) cntx++;
}
if (cntx == 0) cout << 1+abs(cntl-cntr) << '\n';
else if (abs(cntl-cntr) >= cntx-1) cout << abs(cntl-cntr)-(cntx-1) << '\n';
else {
int d = cntx-1-abs(cntl-cntr);
if (d%2 == 0) puts("0");
else puts("1");
}
return 0;
}