VK Cup 2016 - Round 1 (Div. 2 Edition) E. Bear and Contribution 单调队列
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 单调队列的更多相关文章
- 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 ...
- 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. 题解: ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) C - Bear and Colors
题目链接: http://codeforces.com/contest/673/problem/C 题解: 枚举所有的区间,维护一下每种颜色出现的次数,记录一下出现最多且最小的就可以了. 暴力n*n. ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- thinkphp博客项目纪录
项目地址:http://files.cnblogs.com/files/wordblog/blog.zip
- linux的防火墙管理
换oricle-linux7系统后,发现iptables的管理方法有不小的改动,记录一下遇到的问题. iptables linux系统已经默认安装了iptables和firewalld两款防火墙管理工 ...
- git常用命令速查表【转】
- Django 1.10文档中文版Part4
2.10 高级教程:如何编写可重用的apps 2.10.1 重用的概念 The Python Package Index (PyPI)有大量的现成可用的Python库.https://www.djan ...
- CPU运行时间——time
用途说明time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情).但是今天我通过查看time命令的手册页,发现它能做的不仅仅是测量运行时间,还可以测量内存 ...
- 解决uc浏览器不支持vw单位的方法
插入下段代码,使用rem来代替vw <script type="text/javascript"> (function (doc, win) { var docEl = ...
- hdu 4726(贪心)
Kia's Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- Pandas DataFrame构造简析
参考书籍:<利用Python进行数据分析> DataFrame简介: DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值.字符串.布尔值等).Dat ...
- review-反思当程序猿的小一年来
误打误撞进入这个行业,也算是缘分把,不到一年的时光里,剖析一下自己,别写了半天代码,学了一堆东西,不知道干嘛.反省一下. 1.目标与知识库 就目前在我看来,是想成为一名优秀的数据工程师,掌握全栈数据分 ...
- vscode vue配置和一些其它辅助【工具篇】
后续有补充就经常更新