C++关键字排序——[G]滑翔翼(按体重差两两分组)

文章讨论了如何在给定一组男女的体重情况下,通过优化配对策略来最小化所有搭档体重差的总和,利用排序和体重平衡原理解决实际问题。
摘要由CSDN通过智能技术生成

题目描述

排在小T和小K前面的一大群人中有N个男人和N个女人。

本着“男女搭配,干活不累”的原则,他(她)们希望一男一女结成对子飞上天去。

由于双人滑翔翼飞行的稳定性很大程度上决定于两侧是否平衡,所以两个人体重相差越小则组成的搭档也越好。

现在已知每个人的体重,你的任务就是将所有人结成N对并使各对的体重差的总和最小。

一对的体重差定义为重的减轻的的值,此值一定大于等于0。

譬如有一对人,男的体重为50,女的体重为55,则他(她)们的体重差为5。

反过来如果男的体重为55,女的体重为50,则他(她)们的体重差仍然是5。

输入

第一行包含一个自然数N(1≤N≤1000),表示有N对人;

第2~N+1行:每行包含一个自然数,表示N个男人的体重;

第N+2~2N+1行:每行包含一个自然数,表示N个女人的体重。

输出

仅有一行包含一个整数,表示配对后N对男女的体重差的总和的最小值。

样例

输入  

4
2
8
5
5
1
4
10
7

输出

6

提示

【样例解释】

样例中,

4个男人的体重分别是2,8,5,5;

4个女人的体重分别是1,4,10,7。

按体重结对的最佳方式为:2-1, 8-10, 5-4, 5-7;

此时4对人的体重差的总和最小,其值为1+2+1+2=6。

【数据规模】

30%的数据满足:1≤N≤10,体重为不超过10的自然数。

100%的数据满足:1≤N≤1000,体重为不超过1,000,000的自然数。

参考代码:(未完成)

#include <bits/stdc++.h>
using namespace std;
bool com(int a,int b){
	return a>b;
}
int main()
{
	int n,cnt=0;
	cin>>n;
	int a[n],b[n];
	for(int i=0;i<n;i++)
		cin>>a[i];
	for(int i=0;i<n;i++)
		cin>>b[i];
	sort(a,a+n,com);
	sort(b,b+n,com);
	for(int i=0;i<n;i++)
		cnt +=abs(a[i]-b[i]);
	cout<<cnt;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值