题面

本题难度中等,记小于 \(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;
}