题解 | #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;
}

全部评论

相关推荐

想找个Java实习,求牛油们看看简历还有没有什么问题
程序员牛肉:项目顺序换一换,把那个智慧平台放上面,好优公寓放下面。那个好优公寓简直就是狗屎,放第一个项目太业余了。 你作为一个即将求职的应届生,第一个项目的技术是:使用了redis,token。调了阿里云的api。甚至使用mybatis-plus这种东西都上来了。 实在是太业余了。要么尽快找一个项目把好优公寓换掉,要么把那个放下面。
点赞 评论 收藏
分享
没有offer的呆呆:日常和暑期都投试一试,3月份机会挺多的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务