迟钝的舞会 题解
题目id:1329
题目描述
牛是公认的笨拙的舞者。然后,约翰发现富有音乐细胞的母牛能产更多的奶。因此,他把他的整圈的牛都拉进了舞蹈培训班,包括所有的公牛(因为跳舞的时候得一男一女-_-)。这些牛正好有\(n\)头是公的,有\(n\)头是母的。 在第一堂课开始之前,舞蹈老师想将他们分成一对一对的(当然,是男的和女的分在一对)。两头牛的身高差越小,他们在跳舞的时候就会配合得越好。给出所有牛的身高,问如何将他们配对,使得所有牛的身高差的和最小。
解题思路
这题很简单,氵题一道,\(2\)分钟切了。
一眼贪心题,假设两组牛身高分别为\(a_n\)和\(b_n\),那么
- \(a_{min}\)肯定和\(b_{min}\)配对
- \(a_{max}\)肯定和\(b_{max}\)配对
根据这两点,我们只要把\(a\)数组和\(b\)数组从小到大排序,最终答案就是\(\sum\limits_{i=1}^{n}{\lvert a_i-b_i \rvert}\)。
AC Code
#include<bits/stdc++.h>
#define N 1000007
#define INF 1e18
#define MOD 998244353
#define LL long long
#define pb push_back
#define lb long double
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define IOS ios::sync_with_stdio(0),cin.tie(nullptr),cout.tie(nullptr)
using namespace std;
LL n,a[N],b[N],ans;
int main()
{
IOS;
cin>>n;
for(LL i=1;i<=n;++i)
cin>>a[i];
for(LL i=1;i<=n;++i)
cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+n+1);
for(LL i=1;i<=n;++i)
ans+=abs(b[i]-a[i]);
cout<<ans;
return 0;
}