题解 | #Forsaken给学生分组#

Forsaken给学生分组

https://ac.nowcoder.com/acm/problem/53389

比较简单的一题,只要注意下有几种情况即可 第一种,每个组都能拥有两个或两个以上的学生 第二种,只有部分组有。 那么我们考虑到底有几个组能获得两个以上的,那不就是先分配一个给他们再分配两个。 那么假如有十个学生分配7组,我们就可以知道有3组是有两个的,但如果是10个学生分配三组,那么必然每组都两个朝上。 仔细观测我们会发现,有几组有两个朝上其实可以用一个式子表示 k=min(k,nk)k=min(k,n-k) 下面是代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,k;cin >> n >> k;
    vector<int> a(n+1);
    for(int i=1;i<=n;++i)cin >> a[i];
    sort(a.begin()+1,a.end());
    long long sum=0;
    k=min(n-k,k);
    for(int l=1,r=n;l<=r&&l<=k;++l,--r)
        sum+=a[r]-a[l];
    cout << sum << endl;
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务