这个题就是一个定理的运用:中位数m具有各变量绝对值与其离差绝对值之和最小的性质。当n是偶数时,num[n/2],num[n/2-1]之间的数都与各个数差的绝对值之和是最小的。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int num[1000001];
int main()
{
//freopen("in.txt","r",stdin);
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
scanf("%d",&num[i]);
sort(num,num+n);
if(n%2==1)
{
cout<<num[n/2];
int minn=0;
for(int i=0; i<n&&num[i]<=num[n/2]; i++)
if(num[i]==num[n/2])
minn++;
cout<<" "<<minn<<" "<<"1"<<endl;
}
else
{
int minn=0;
for(int i=0; i<n&&num[i]<=num[n/2]; i++)
if(num[i]==num[n/2]||num[i]==num[n/2-1])
minn++;
cout<<num[n/2-1]<<" "<<minn<<" ";
cout<<num[n/2]-num[n/2-1]+1<<endl;
}
}
return 0;
}