C. Liebig's Barrels
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

You have m = n·k wooden staves. The i-th stave has length ai. You have to assemble n barrels consisting of k staves each, you can use any k staves to construct a barrel. Each stave must belong to exactly one barrel.

Let volume vj of barrel j be equal to the length of the minimal stave in it.

You want to assemble exactly n barrels with the maximal total sum of volumes. But you have to make them equal enough, so a difference between volumes of any pair of the resulting barrels must not exceed l, i.e. |vx - vy| ≤ l for any 1 ≤ x ≤ n and 1 ≤ y ≤ n.

Print maximal total sum of volumes of equal enough barrels or 0 if it's impossible to satisfy the condition above.

Input

The first line contains three space-separated integers n, k and l (1 ≤ n, k ≤ 105, 1 ≤ n·k ≤ 105, 0 ≤ l ≤ 109).

The second line contains m = n·k space-separated integers a1, a2, ..., am (1 ≤ ai ≤ 109) — lengths of staves.

Output

Print single integer — maximal total sum of the volumes of barrels or 0 if it's impossible to construct exactly n barrels satisfying the condition |vx - vy| ≤ l for any 1 ≤ x ≤ n and 1 ≤ y ≤ n.

Examples
Input

Copy

4 2 12 2 1 2 3 2 2 3

Output

Copy

7

Input

Copy

2 1 010 10

Output

Copy

20

Input

Copy

1 2 15 2

Output

Copy

2

Input

Copy

3 2 11 2 3 4 5 6

Output

Copy

0

Note

In the first example you can form the following barrels: [1, 2], [2, 2], [2, 3], [2, 3].

In the second example you can form the following barrels: [10], [10].

In the third example you can form the following barrels: [2, 5].

In the fourth example difference between volumes of barrels in any partition is at least 2 so it is impossible to make barrels equal enough.

这道题忍住了看题解。自己独立思考了QAQ。
但是div2的C题还是属于那种自己可以做但需要花很长时间的那种,希望慢慢进步(D题先凑合着题解自己写QAQ)
补完了这道题去洗澡澡
题意很简单,给n,k,l, l是体积限定的条件见上,k是每个小序列的长度,n是小序列的个数。再给你N*K个数
这道题是一道贪心的题目,我的想法是对于这一系列数字来说:对于分成的k个序列,每个序列中最小的就是代表这个体积,在符合情况| Vi-Vj |<=l的情况下取尽可能大的体积。
首先对数组排序,首先排序后的arr[1]肯定是一个序列的体积(放哪里都是最小的),那么我要满足l的限定条件的话,体积的取值一定在arr[1]~arr[1]+l中,找到arr[1]+l这个值所对应的数组下标。
对于一般情况,n<arr[1]+l,取贪心的状况:我要使得体积取值总和尽可能地大,就是对于每个体积(我们从小到大来取)尽可能多得涵盖掉较小的数,我们举一个例子:1、2、3、4、5、6、7假设能取最小体积的范围为这个,我们总共需要两个序列,每个序列5个数,那么对于1我就把序列的5个数涵盖掉2、3、4、5,这样就能尽可能地大了。
然后只需要考虑每个序列最小体积地取值,剩余地自然会从剩下的值中取。
再考虑涵盖不掉全部的情况,比如刚才的例子,对于刚刚的6来说,只剩下6和7了,自然涵盖完,但是如果n是3呢,就只能一个取6 一个取7,单独判断一下就好(k不行变成k-1一直减到0为止(保证k过后剩下的元素个数大于等于还没取得序列个数))
说了一大堆,上代码(懒得加注释了改了好多遍才过之前一直WA7是用样例推得时候最小为1,就一直l+1到好久....)
菜啊qwq
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
#include<stack>
using namespace std;
typedef long long LL;
LL arr[100010];
LL tem[100010];int main()
{LL sum=0;LL n,k;LL l;cin>>n>>k>>l;for(LL i=1;i<=n*k;i++){cin>>arr[i];}sort(arr+1,arr+1+n*k);LL j=0;tem[++j]=1;int ans;for(LL i=1;i<=n*k;i++){if(arr[i+1]!=arr[i])tem[++j]=i;else tem[j]=i;if(arr[i]==l+arr[1])ans=i;else if(arr[i]<l+arr[1]&&l+arr[1]<arr[i+1])ans=i;}LL pre=1;if(ans<n){cout<<"0";return 0;}if(n==1){cout<<arr[1];return 0;}for(LL m=1;m<=n;m++){if(pre+k-1+(n-m)<=ans&&k!=0){sum+=arr[pre];pre=pre+k;}else{while(--k){if(pre+k-1+(n-m)==ans){sum+=arr[pre];pre=pre+k;k=0;break;}}}if(k==0){for(LL i=pre;i<=ans;i++){sum+=arr[i];}break;}}cout<<sum;return 0;
} 

coderforce Educational Codeforces Round 44 (Rated for Div. 2) C(赛后补题)相关推荐

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

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

  2. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  3. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  4. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  5. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  6. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

  7. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  8. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai​,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai​!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...

最新文章

  1. IOS文本框readonly时焦点事件
  2. Linux下调试python
  3. python crawler(2)
  4. java 接口 签名机制_java – 当接口A在其方法签名中定义接口B时
  5. python的输出函数_Python
  6. rnn按时间展开_一文搞懂RNN(循环神经网络)基础篇
  7. File存对象--android 的File存储到SD卡();
  8. 【操作系统】—操作系统的概念 目标和功能
  9. Java 大对象类型的 Hiberante 映射
  10. kali安卓手机木马远控
  11. HTML期末大作业课程设计~仿阴阳师游戏官网首页html模板(HTML+CSS)~动漫主题html5网页模板-HTML期末作业课程设计期末大作业动漫主题html5网页模板-html5网页设计源码...
  12. ADC标准 INLDNL(1)
  13. 如何从AD中彻底删除Skype For Business(下篇)
  14. Java中Number转为百分比
  15. 前端学习 Vue笔记 完整版
  16. Python--数字炸弹游戏
  17. unity 时间换算 时分秒
  18. 使用Altium Designer 绘制PCB的详细过程
  19. 自学软件测试该如何入门?
  20. 微信小程序-日历的实现

热门文章

  1. Linux输入cd按回车,linux cd命令
  2. 微型计算机在cad和cam中,重庆大学网络教育学院2013年9月份考试机械CAD/CAM第一次作业及答...
  3. pta6翻了C++超简单做法超简单代码
  4. 如何从零开始学做互联网运营?
  5. electron-builder打包工具的最简化使用
  6. 天池赛:淘宝用户购物行为数据可视化分析
  7. 精简小巧的数据库sqlite
  8. Oracle P6软件项目进度控制原则
  9. vscode设置自动换行
  10. 【毕设论文】基于51单片机的超智能鞋柜设计