题解 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(动态规划,单调队列)