悬关求调(球球了
  • 板块灌水区
  • 楼主lxc_why
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/10/17 19:50
  • 上次更新2024/10/17 21:35:30
查看原帖
悬关求调(球球了
1499574
lxc_why楼主2024/10/17 19:50

题目:

勇士 ( strongest )

【题目描述】

王国有 n 个勇士,他们的能力值使用整数数组 arr 表示,现在国王想要召集 k 个能力值最强的勇士。判断能力值强弱的规则如下: 设 m 为数组的中位数,只要满足下述两个前提之一,就可以判定 arr[i] 的 值比 arr[j] 的值更强: |arr[i] - m| > |arr[j] - m| |arr[i] - m| == |arr[j] - m|,且 arr[i] > arr[j] 中位数是一个有序整数列表中处于中间位置的值。形式上,如果列表的长度 为 n ,那么中位数就是该有序列表(下标从 0 开始)中位于 ((n - 1) / 2) 的 元素。 请你使用编码的方式帮助国王找到王国中最强的 k 个勇士的能力值组成的 序列。答案按照降序返回。

【输入描述】

第一行输入整数 n 和 k,分别表示王国勇士总人数和要查找的 k 个勇士。第 二行输入数组 arr 的值,表示勇士的能力值,arr[i]表示第 i 个勇士的能力值。

【输出描述】

输出一个降序序列,表示前 k 个最强能力值。

【输入样例 1】

5 2 1 2 3 4 5

【输出样例 1】

5 1

【输入样例 2】

6 5 6 7 11 7 6 8

【输出样例 2】

11 8 6 6 7 样例解释: 样例 1 中,中位数为 3,按从强到弱顺序排序后,数组变为 [5,1,4,2,3]。 最强的两个元素是 [5, 1]。注意,尽管 |5 - 3| == |1 - 3| ,但是 5 比 1 更 强,因为 5 > 1 。 样例 2 中,中位数为 7, 按从强到弱顺序排序后,数组变为 [11,8,6,6,7,7]。 [11,8,6,6,7] 是前 5 个最强能力值。

【数据范围】

1<=k<=n<=1000; 1<=arr[i]<=1000

我的破代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,m,arr[1005],a[1005];
bool cmp(int a,int b){
	if(abs(a-m)!=abs(b-m))return abs(a-m)>abs(b-m);
	return a>b;
}
bool cmp2(int a,int b){
	return a>b;
}
int main() {
	//freopen("number.in","r",stdin); 
	//freopen("number.ans","w",stdout);
	cin>>n>>k;
	for (int i=0;i<n;i++){
		cin>>arr[i];
	}
	m=arr[(n-1)/2];
	sort(arr,arr+n,cmp);
	for (int i=0;i<k;i++){
		a[i]=arr[i];
	}
	sort(a,a+k,cmp2);
	for(int i=0;i<k;i++){
		cout<<a[i]<<" ";
	}
    return 0;
}

由衷的感谢

2024/10/17 19:50
加载中...