迟钝的舞会 题解

题目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;
}
posted @ 2024-08-06 16:15  Firra3500  阅读(2)  评论(0编辑  收藏  举报