文章

1

粉丝

0

获赞

1

访问

114

头像
中位数-ENCU 题解:
P1963 华东师范大学2021年机试
发布于2025年9月7日 21:06
阅读数 114

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n, s;
	cin >> n >> s;
	vector <int> A;
	for (int i = 0; i < n; i++) {
		int n;
		cin >> n;
		A.push_back(n);
	}
	sort(A.begin(), A.end());
	long long ans = 0;
	int mid = A[n / 2 ];
	if (mid == s) {
		ans = 0;
	} else if (mid > s) {
		for (int i = n / 2 ; i >= 0; i--) {
			if (A[i] > s)
				ans += abs(A[i] - s);
		}
	} else if (mid < s) {
		for (int i = n / 2 ; i < n; i++) {
			if (A[i] < s)
				ans += abs(A[i] - s);
		}
	}
	cout << ans;
}
  • 排序数组;

  • 找到中位数 A[n / 2]

  • 如果中位数大于 s,就把中位数及其左侧大于 s 的数降到 s

  • 如果中位数小于 s,就把中位数及其右侧小于 s 的数升到 s

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发