码迷,mamicode.com
首页 > 其他好文 > 详细

题解 CF1092B 【Teams Forming】

时间:2019-10-07 00:28:03      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:题目   turn   cpp   一个   span   c++   return   out   n+1   

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

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

\(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】

标签:题目   turn   cpp   一个   span   c++   return   out   n+1   

原文地址:https://www.cnblogs.com/WKAHPM/p/11629008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!