先排序,
考虑最中间的数字和s的大小,如果比s大就把中间和后面所有小于s的数字变成s,比s小同理
一开始用冒泡的感觉做的,没有考虑中间数字和s的大小,wa了半天
#include<bits/stdc++.h>
using namespace std;
int a[200010];
int main()
{
int n,s;
scanf("%d%d",&n,&s);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
int mid=n/2+1;
int loc=lower_bound(a+1,a+1+n,s)-a;
long long res=0;
if(loc==mid)
res+=abs(s-a[mid]);//不要忘记中间的数字和s的关系,所以用a[mid]和s的大小判断会更好
else if(loc<mid)
{
for(int i=loc;i<=mid;i++)
{
res+=(a[i]-s);
}
}
else if(loc>mid)
{
for(int i=mid;i<loc;i++)
{
res+=(s-a[i]);
}
}
printf("%lld\n",res);
}