#113 div2
题意:给n个数的序列,问最少添加多少个数字,使得序列的中位数是m?
暴力排序,首先注意如果序列里没有m那么添加一个m是必须的,然后就是对于每个m,判断其前后分别有多少个数字,通过计算要加几个数字来把当前数字推到中位数位置
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define rep(i, j, k) for (int i = j; i <= k; i++)
using namespace std;
int n, p, a[1000];
int main ()
{
cin >> n >> p;
rep (i, 1, n)
scanf ("%d", &a[i]);
int have = 0;
rep (i, 1, n)
have |= (a[i] == p);
if (have == 0)
a[++n] = p;
sort (a + 1, a + 1 + n);
int l = 0, r = 0, ans = 0x7fffffff;
rep (i, 1, n)
if (a[i] == p)
{
l = i;
break;
}
for (int i = n; i >= 1; i--)
if (a[i] == p)
{
r = i;
break;
}
if (a[(n + 1) / 2] == p)
{
cout << 0 + (have == 0)<< endl;
return 0;
}
rep (i, l, r)
{
int left = i - 1, right = n - i;
//printf ("%d == %d %d\n", i, left, right);
if (left < right)
ans = min (ans, right - left - 1);
else
ans = min (ans, left - right);
}
cout << ans + (have == 0) << endl;
}