CF985C

题意:

你要组成N个木桶,组成每个木桶需要K个木块,(第二行给你N*K个木块),使得任意两个木桶之间的差值不超过L的情况,使得所有木桶可以装的水的和最大,输出这个最大和,如果无法满足要求输出0。

解法:

因为众所周知的木板原理,我们考虑贪心,对木板的长度进行排序。

易知,让长度相差小的木板组合比较优。

首先考虑没答案的情况,假设最短的木板为a[0],那么所有木桶中能装水的最小值就确定了为a[0]。所以其他木桶的最短板不能超过a[0]+L,如果范围在a[0]~(a[0]+L)的木板少于N块肯定不行

排序upper_bound求一下即可,假设有pos块。

如满足要求,考虑范围在a[0]~(a[0]+L)木块,我们尽量的使短的木板组合在一起,那么就是[0,k)个组成第一个桶(如果剩余木板还够N-1个),前[K,2k)个组成第二个桶(如果剩余木板还够N-2个)...前[iK,(i+1)*k)个组成第i个桶(如果剩余木板还够N-i个)。如果选取了i个之后,剩余不够再这样组合了,我们直接从这些木块中选取最后的 N-i 块即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring> using namespace std; #define LL long long
#define N 100010 int m,n,k,l,a[N]; int main() {
scanf("%d%d%d",&n,&k,&l);
m = n * k;
for(int i = 0 ; i < m ; i++)
scanf("%d",&a[i]);
sort(a,a + m);
int pos = upper_bound(a,a + m,a[0] + l) - a;
LL ans = 0;
if(n <= pos) {
int i;
for(i = 0 ; pos - i * k > n - i ; i++) ans += a[i * k];
for(int j = pos - 1 ; j >= pos - n + i ; j--) ans += a[j];
}
printf("%lld \n",ans);
// system("pause");
return 0;
}

CF985C的更多相关文章

  1. CF985C Liebig's Barrels 贪心 第二十

    Liebig's Barrels time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

随机推荐

  1. spring-boot-plus CORS跨域处理

    CORS跨域处理 CORS:Cross-Origin Resource Sharing CORS是一种允许当前域(domain)的资源(比如html/js/web service)被其他域(domai ...

  2. 【ES6 】ES6 解构赋值--函数参数解构赋值

    函数的参数也可以使用解构赋值. function add([x, y]){ return x + y; } add([1, 2]); 上面代码中,函数add的参数表面上是一个数组,但在传入参数的那一刻 ...

  3. oracle导入时IMP-00010: 不是有效的导出文件, 头部验证失败

    头部验证失败是由于版本号不同所致,经试验可以通过如下方法进行修改:用notepad++工具打开dmp文件,可以看到头部信息 --TEXPORT:V11.01.00,即为源数据库的版本号,将其修改为目的 ...

  4. Python 数字(函数)

    Python支持4种不同数值类型: 整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点. 长整型(long integers) - 无限大小的整数,整数最后是一个大写或小写的L. 浮 ...

  5. Docker Registry搭建

    一.前言 Docker官方镜像仓库 访问速度很慢,Docker Registry允许搭建我们自己的镜像仓库,为实现镜像拉取.推送提供便利. 二.安装与启动 1.创建目录 mkdir /usr/loca ...

  6. js中数组方法及分类

    数组的方法有很多,这里简单整理下常用的21种方法,并且根据它们的作用分了类,便于记忆和理解. 根据是否改变原数组,可以分为两大类,两大类又根据不同功能分为几个小类 一.操作使原数组改变   1.数组的 ...

  7. docker第二篇 Docker基础用法

    Docker中的容器 lxc -> libcontainer -> runC OCI (Open Container Initiative) 由Linux基金会主导于2015年6月创立 作 ...

  8. 【Day4】2.详解Http请求协议

    Http请求协议

  9. 误删rpm命令的恢复方法

    rpm命令不能用了,被依赖的yum也不能使用了, 恢复rpm命令无外乎重装, 重装方法1: 使用源码编译,  需要gcc ,cmake包,如果没装,悲剧了 重装方法2: 找一台,和出问题的这台同样系统 ...

  10. 12 canvas 画布 - 基础

    二.线条的绘制和填充 在canvas中,各个图像绘制代码可以通过beginPath()和closePath()这两个函数进行包裹,主要用于分割各个画图,表示开始和结束.线条的绘制主要调用方法是move ...