题意:

有n * k块木板,每个木桶由k木板组成,每个木桶的容量定义为它最短的那块木板的长度。

任意两个木桶的容量v1,v2,满足|v1-v2| <= d。

问n个木桶容量的最大的和为多少,或者说明不可能做出这样的n个木桶。

思路:

贪心

要满足|v1-v2| <= d,那么就要满足最大的木桶容量和最小的木桶容量的差小于等于d。

所以先把木板长度排序,如果a[0] 到 a[0] + d这个范围内有大于等于n个木板,那么就存在合理的分配方案,因为可以把至少n个木板作为最短的木板。

然后就计算最大的和,如果a[0] 到 a[0] + d这个范围内刚好有n块木板,那么最大的和就是这n块木板长度的和;

如果大于n的话,那么就要考虑让每个木桶最小木板的长度尽可能的大,就是让每个最小木板尽选择数组后面的数字。

因为1块木板可以支配k - 1块木板,所以下一个木桶的最小长度就可以从a[k]开始,这样就让最小的尽量大了。

一个木板可以覆盖的区间长度是k,假设a[0] 到 a[0] + d这个范围内有sum块木板,那么多余的木板就是res = sum - n。

区间数量就是c = res / (k-1),设r = res % (k - 1),

当r = 0,那么就有c个完整的区间,前c个木桶的长度就是0*k,1*k,2*k . . . (c-1)*k,后n - c个木桶的容量的下标就从c * k到sum-1;

当r != 0,有c个完整的区间和一个不完整的区间,前c + 1个木桶的容量就是0 * k,1 * k,2 * k . . . c * k,后n - c - 1个木桶的容量的下标就从c * k + r + 1到sum - 1。

代码:

 #include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int N = 1e5 + ;
long long a[N];
int main()
{
int n,k;
long long l;
scanf("%d%d%lld",&n,&k,&l);
for (int i = ;i < n * k;i++) scanf("%lld",&a[i]);
sort(a,a+n*k);
//printf("%lld\n",a[0] + l);
int pos = upper_bound(a,a+n*k,a[] + l) - a;
pos--;
//printf("%d\n",pos);
if (pos < n - ) puts("");
else
{
long long ans = ;
int sum = pos + ;
if (sum == n)
{
for (int i = ;i < n;i++) ans += a[i];
}
else
{
if (k == )
{
for (int i = ;i < n;i++) ans += a[i];
}
else
{
int c = (sum - n) / (k - );
int r = (sum - n) % (k - );
if (r)
{
for (int i = ;i <= c;i++)
{
ans += a[i*k];
}
n -= c + ;
for (int i = k * c + r + ;i <= pos;i++)
{
if (n == ) break;
ans += a[i];
n--;
}
}
else
{
for (int i = ;i < c;i++)
{
ans += a[i*k];
}
n -= c;
for (int i = k * c;i <= pos;i++)
{
if (n == ) break;
ans += a[i];
n--;
}
}
}
}
printf("%lld\n",ans);
}
return ;
}

codeforces 985C Liebig's Barrels的更多相关文章

  1. codeforces 985C Liebig's Barrels(贪心)

    题目 题意: 有n * k块木板,每个木桶由k木板组成,每个木桶的容量定义为它最短的那块木板的长度. 任意两个木桶的容量v1,v2,满足|v1-v2| <= d. 问n个木桶容量的最大的和为多少 ...

  2. codeforce 985C Liebig's Barrels(贪心+思维)

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

  3. Codeforce Div-2 985 C. Liebig's Barrels

    http://codeforces.com/contest/985/problem/C C. Liebig's Barrels time limit per test 2 seconds memory ...

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

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

  5. Liebig's Barrels CodeForces - 985C (贪心)

    链接 大意:给定$nk$块木板, 要制作$n$个$k$块板的桶, 要求任意两桶容积差不超过$l$, 每个桶的容积为最短木板长, 输出$n$个桶的最大容积和 假设最短板长$m$, 显然最后桶的体积都在$ ...

  6. C. Liebig's Barrels

    You have m = n·k wooden staves. The i-th stave has length ai. You have to assemble nbarrels consisti ...

  7. Educational Codeforces Round 44 (Rated for Div. 2)

    题目链接:https://codeforces.com/contest/985 ’A.Chess Placing 题意:给了一维的一个棋盘,共有n(n必为偶数)个格子.棋盘上是黑白相间的.现在棋盘上有 ...

  8. 【codeforces 768F】 Barrels and boxes

    http://codeforces.com/problemset/problem/768/F (题目链接) 题意 A,B两种物品可以装到栈中,每个栈只能存放一种物品,容量没有限制.现在讲所有栈排成一列 ...

  9. 【codeforces 768F】Barrels and boxes

    [题目链接]:http://codeforces.com/problemset/problem/768/F [题意] 让你把f个food和w个wine装在若干个栈里面; 每个栈只能装food或者是wi ...

随机推荐

  1. Http的定义及其基本概念介绍

    HTTP的特性 HTTP构建于TCP/IP协议之上,默认端口号是80 HTTP是无连接无状态的 HTTP报文 请求报文 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST ...

  2. rails无法使用页面缓存的解决办法

    书上云在config/envirionments/development.rb中开启了缓存机制后,我们即可以使用缓存鸟:   config.action_controller.perform_cach ...

  3. webpack安装使用

    一.安装 1.安装node.js,Webpack 需要 Node.js v0.6 以上支持 2.使用npm(软件包管理 )安装webpack (1)全局安装    npm install webpac ...

  4. Android平台的Swift—Kotlin

    WeTest 导读 Kotlin 已经出来较长一段时间了,有些同学已经对Kotlin进行了深入的学习,甚至已经运用到了自己的项目当中,但是还有较多同学可能只是听过Kotlin或简单了解过,这篇文章的目 ...

  5. List集合中元素排序

    应用场景: 在开发中经常遇到要对List<Object>集合进行排序,并且是根据集合中的对象的某个属性来进行排序    --------以下就此做出的解决方案 public static ...

  6. htmlDOM操作1

    DOM 是 Document Object Model(文档对象模型)的缩写. HTML 的标准对象模型 HTML 的标准编程接口 HTML DOM 定义了所有 HTML 元素的对象和属性,以及访问它 ...

  7. JavaScript中对象数组 根据某个属性值 然后push到新的数组

    原文链接 https://segmentfault.com/q/1010000010075035 将下列对象数组中,工资大于1w的员工,增加到对象数组 WanSalary中 var BaiduUser ...

  8. Linux常用资源(不断改进中)

    Linux常用命令全集:  http://linux.chinaitlab.com/special/linuxcom/Index.html ubuntu 12.04 配置指南: http://www. ...

  9. 数据库导入Excel数据的简易方法

    当然,最糙猛的方式就是自己写程序读取Excel程序然后插进数据库,但那种方式要求太高.说个简单方法,主流数据库的管理工具支持CSV文件格式数据向表导入,而Excel可以另存外CSV文件,这种导入就手工 ...

  10. nginx基本配置参数说明

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...