题意:求使得求差后绝对值和最小的A的最小值,给定数中有多少个可以满足权值最小,有多少数可以满足权值最小。
思路:排序后找中位数,如果是奇数,A就是它,如果是偶数,中间两个数之间的值都可以满足权值最小。
AC代码如下:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,num[1000010];
int main()
{
int i,j,k,l,r,L,R;
while(~scanf("%d",&n))
{
for(i=1;i<=n;i++)
scanf("%d",&num[i]);
sort(num+1,num+1+n);
if(n&1)
{
l=r=num[n/2+1];
L=R=n/2+1;
}
else
{
l=num[n/2];
r=num[n/2+1];
L=n/2;R=n/2+1;
}
while(L>1 && num[L-1]==num[L])
L--;
while(R<n && num[R+1]==num[R])
R++;
printf("%d %d %d\n",l,R-L+1,r-l+1);
}
}