题目大意:给出一组数
(X1,X2…Xn)
,求一个数 A 使得
(|X1−A|+|X2−A|+…+|Xn−A|)
最小,输出三个数:第一个是最小的A,第二个数是数列
Xn
中有多少个数可以是 A,第三个数是 A 的总个数( A 不一定在
Xn
中)
解题思路:求中位数,分奇偶数算
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<queue>
#include<map>
using namespace std;
const int MAXN = 1000000+10;
int num[MAXN];
int cnt, mas, ans;
int main() {
int n;
while (scanf("%d", &n) != EOF) {
for (int i = 0; i < n; i++)
scanf("%d", & num[i]);
sort (num, num+n);
cnt = 0;
if (n%2) {
mas = num[n/2];
for (int i = 0; i < n; i++)
if (num[i] == mas) cnt++;
ans = 1;
}
else {
int lef = num[n/2-1];
int rig = num[n/2];
mas = lef;
for (int i = n/2-1; i >= 0; i--)
if (num[i] == lef) cnt++;
for (int i = n/2; i < n; i++)
if (num[i] == rig) cnt++;
ans = rig - lef + 1;
}
printf("%d %d %d\n", mas, cnt, ans);
}
return 0;
}