青少年编程知识记录 codecoming

【题解】滑翔翼

【题目描述】

小T和小K都是OIER,入选省队后有幸去苏州参加JSOI集训,训练之余,他们相约一起去苏州乐园玩。

苏州乐园里有一个非常热门的游乐项目叫双人滑翔翼。小T想和小K一起乘双人滑翔翼,但是排在他们前面的一大群人却为了搭配问题而争执不休,小T和小K便自告奋勇上前为他(她)们排扰解难。

排在小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

【题目分析】



参考答案

#include<bits/stdc++.h>  using namespace std;  int a[1000001],b[1000001];  bool cmp(int a,int b) {  	return a>b;  }  int main() {  	int n,ans=0;;  	cin>>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,cmp);  	sort(b,b+n,cmp);  	for(int i=0; i<n; i++) {  		ans+=abs(a[i]-b[i]);  	}  	cout<<ans;  	return 0;  }



(adsbygoogle = window.adsbygoogle || []).push({});

作者:亿万年的星光 分类:题解目录 浏览: