您的位置:首页 > 其它

UVA - 10057 A mid-summer night's dream.

2016-11-17 15:34 417 查看
题目大意:给出一组数(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: