题解 CF1092B Teams Forming

Posted wkahpm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 CF1092B Teams Forming相关的知识,希望对你有一定的参考价值。

这题的基本思想就是贪心吧

题目就是让你两两分组,使得每组能力值的差值最小

\(a_1,a_2,···,a_n\)表示每个学生的能力值

且满足:\(a_1 \le a_2 \le ··· \le a_n\)

则对于任意一个能力值\(a_i\),它的最优匹配为\(a_i+1\)\(i\)为奇数)

考虑到\(a_1\),我们不取\(a_i-1\)(你想想\(a_1-1\)是什么)

假设存在一个能力值\(a_k\) (\(k> i+1\)),使得\(a_k-a_i< a_i+1-a_i\)

即: \(a_k<a_i+1\)

\(a_i+1<a_k\)

∴ 不存在这样的\(k\)

Code

#include<bits/stdc++.h>
using namespace std;
int n;
int a[110],ans; 
int main()

    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);//要先排序
    for(int i=1;i<=n;i+=2) //i要为奇数
        
        ans+=a[i+1]-a[i];//答案加上两个能力值的差
    
    cout<<ans;
    return 0;

以上是关于题解 CF1092B Teams Forming的主要内容,如果未能解决你的问题,请参考以下文章

CF1133EK Balanced Teams(动态规划,单调队列)

CF #544 div3 E. K Balanced Teams

CF552 E. Two Teams

SELTEAM - Selecting Teams题解

题解 CF1063B Labyrinth

CF899A Splitting in Teams