E. Bear and Contribution

题目连接:

http://www.codeforces.com/contest/658/problem/E

Description

Codeforces is a wonderful platform and one its feature shows how much someone contributes to the community. Every registered user has contribution — an integer number, not necessarily positive. There are n registered users and the i-th of them has contribution ti.

Limak is a little polar bear and he's new into competitive programming. He doesn't even have an account in Codeforces but he is able to upvote existing blogs and comments. We assume that every registered user has infinitely many blogs and comments.

Limak can spend b minutes to read one blog and upvote it. Author's contribution will be increased by 5.

Limak can spend c minutes to read one comment and upvote it. Author's contribution will be increased by 1.

Note that it's possible that Limak reads blogs faster than comments.

Limak likes ties. He thinks it would be awesome to see a tie between at least k registered users. To make it happen he is going to spend some time on reading and upvoting. After that, there should exist an integer value x that at least k registered users have contribution exactly x.

How much time does Limak need to achieve his goal?

Input

The first line contains four integers n, k, b and c (2 ≤ k ≤ n ≤ 200 000, 1 ≤ b, c ≤ 1000) — the number of registered users, the required minimum number of users with the same contribution, time needed to read and upvote a blog, and time needed to read and upvote a comment, respectively.

The second line contains n integers t1, t2, ..., tn (|ti| ≤ 109) where ti denotes contribution of the i-th registered user.

Output

Print the minimum number of minutes Limak will spend to get a tie between at least k registered users.

Sample Input

4 3 100 30

12 2 6 1

Sample Output

220

Hint

题意

有n个数,你想使得其中至少k个数相同,你使得一个数加5需要花费b,使得一个数加1需要花费c

问你最少花费多少才能满足题意。

题解:

首先对于整体来说,不一定是选择的是一个连续的区间的数,因为有加5这个操作

但是我现在分开考虑,按照%5的不同的值分开考虑,每一个模数里面所选择的数一定是连续的一段

知道这个之后,我们就暴力的去维护五个单调队列就好了。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+7; int n,k;
long long b,c,a[maxn];
vector<long long>v[5];
queue<long long>Q[5];
long long cal(long long x,long long y)
{
return (y-x)/5*b+(y-x)%5*c;
}
int main()
{
scanf("%d%d%lld%lld",&n,&k,&b,&c);b=min(b,5*c);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
a[i]=a[i]+1e9+1;
}
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
for(int j=0;j<5;j++)
v[(a[i]+j)%5].push_back(a[i]+j);
for(int i=0;i<5;i++)
{
sort(v[i].begin(),v[i].end());
v[i].erase(unique(v[i].begin(),v[i].end()),v[i].end());
}
long long ans = 1e18;
for(int p=0;p<5;p++)
{
for(int i=0;i<5;i++)while(!Q[i].empty())Q[i].pop();
long long tmp = 0;
int num = 0;
for(int i=0;i<v[p].size();i++)
{
if(i)tmp=tmp+min(num,k)*(v[p][i]-v[p][i-1])/5*b;
while(num<n&&a[num+1]<=v[p][i])
{
num++;
Q[a[num]%5].push(a[num]);
tmp+=cal(a[num],v[p][i]);
if(num>k)
{
long long s = 0;
for(int j=0;j<5;j++)
{
if(Q[j].size())
{
int now = Q[j].front();
s=max(s,cal(now,v[p][i]));
}
}
for(int j=0;j<5;j++)
{
if(Q[j].size())
{
int now = Q[j].front();
if(cal(now,v[p][i])==s)
{
Q[j].pop();
tmp-=s;
break;
}
}
}
}
if(num>=k)ans=min(ans,tmp);
}
}
}
cout<<ans<<endl;
}

VK Cup 2016 - Round 1 (Div. 2 Edition) E. Bear and Contribution 单调队列的更多相关文章

  1. VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3

    C. Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input ...

  2. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D Bear and Two Paths

    题目链接: http://codeforces.com/contest/673/problem/D 题意: 给四个不同点a,b,c,d,求是否能构造出两条哈密顿通路,一条a到b,一条c到d. 题解: ...

  3. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C - Bear and Colors

    题目链接: http://codeforces.com/contest/673/problem/C 题解: 枚举所有的区间,维护一下每种颜色出现的次数,记录一下出现最多且最小的就可以了. 暴力n*n. ...

  4. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D. Bear and Two Paths 构造

    D. Bear and Two Paths 题目连接: http://www.codeforces.com/contest/673/problem/D Description Bearland has ...

  5. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C. Bear and Colors 暴力

    C. Bear and Colors 题目连接: http://www.codeforces.com/contest/673/problem/C Description Bear Limak has ...

  6. Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) A. Bear and Game 水题

    A. Bear and Game 题目连接: http://www.codeforces.com/contest/673/problem/A Description Bear Limak likes ...

  7. VK Cup 2016 - Round 1 (Div. 2 Edition) D. Bear and Polynomials

    D. Bear and Polynomials 题目连接: http://www.codeforces.com/contest/658/problem/D Description Limak is a ...

  8. VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3 构造

    C. Bear and Forgotten Tree 3 题目连接: http://www.codeforces.com/contest/658/problem/C Description A tre ...

  9. VK Cup 2016 - Round 1 (Div. 2 Edition) B. Bear and Displayed Friends 树状数组

    B. Bear and Displayed Friends 题目连接: http://www.codeforces.com/contest/658/problem/B Description Lima ...

随机推荐

  1. Android中注册获取验证码倒计时按钮

    public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; /** * @param t ...

  2. [LeetCode] Intersection of Two Linked Lists 两链表是否相交

    Write a program to find the node at which the intersection of two singly linked lists begins. For ex ...

  3. 技巧之如何快速使用websocket来监控标准输出

    为啥是Websocket 服务端可以主动推送消息到浏览器端.比如服务端实时在打印日志,这是一个标准输出,可以实时将日志推送到浏览器. 为啥用websocketd (https://github.com ...

  4. 64_r1

    R-3.4.0-2.fc26.x86_64.rpm 15-May-2017 14:49 31030 R-ALL-1.6.0-4.fc26.noarch.rpm 17-Feb-2017 22:05 11 ...

  5. Codeforces Round #434 (Div. 2)

    Codeforces Round #434 (Div. 2) 刚好时间对得上,就去打了一场cf,发现自己的代码正确度有待提高. A. k-rounding 题目描述:给定两个整数\(n, k\),求一 ...

  6. jQuery常用事件方法详解

    目录 jQuery事件 ready(fn)|$(function(){}) jQuery.on() jQuery.click jQuery.data() jQuery.submit() jQuery事 ...

  7. LGPL 与GPL的区别

    GPL(GNU General Public License) 我们很熟悉的Linux就是采用了GPL.GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样.GPL的出发点是 ...

  8. inux命令英文缩写的含义(方便记忆) 2

    linux常用命令的英文单词缩写 命令缩写: ls:list(列出目录内容) cd:Change Directory(改变目录) su:switch user 切换用户rpm:redhat packa ...

  9. Linux 基础——关机重启命令shutdown、reboot等

    一.关机重启命令的作用 相信对于接触过电脑的人来说,特别是对于windows系统来说,如果长时间使用不经重启的话会出现一点点卡顿的感觉.但是当重启整个系统后,这点点卡顿的感觉好像又没了,重启后wind ...

  10. LoadRunner去除事物中的程序的执行时间

    大家在性能测试过程中,经常会用到程序处理或组织数据,以达到一定的测试目的,但是程序本身执行会消耗一些时间,这部分消耗的时间是包含在响应时间里面,此时,响应时间=正常响应时间+程序执行消耗时间.那么如何 ...