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 ...
随机推荐
- Git HTTPS 方式自动保存用户名密码
一行命令搞定: git config --global credential.helper wincred 第一次输入用户名和密码提交,第二次就不需要了 参考: https://help.github ...
- password passphrase passcode 的区别
In general, passphrases are long passwords and passcodes are numeric-only passwords.
- 2. 数据库文件配置与简单操作 Model / M()
官方文档说明位置: Thinkphp/Conf/convention.php 内容说明如下: 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // 服 ...
- Linux下搜索命令
linux下用于查找文件的5个命令,有需要的朋友可以参考下.包括find,whereis,locate,which与type. linux下用于查找文件的5个命令,有需要的朋友可以参考下.包括find ...
- python模块分析之sqlite3数据库
SQLite作为一种应用广泛的文件式关系型数据库,python操作sqlite主要有两种方式,原生SQL语句和ORM映射工具. SQLAlchemy连接SQLITE SQLAlchemy是一款优秀的p ...
- django框架<二>
django框架: Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射 ...
- java版云笔记(二)
云笔记 基本的环境搭建好了,今天做些什么呢,第一是链接数据库(即搭建Spring-Batistas环境),第二是登录预注册. 注:这个项目的sql文件,需求文档,需要的html文件,jar包都可以去下 ...
- Effective C++笔记(二):构造/析构/赋值运算
参考:http://www.cnblogs.com/ronny/p/3740926.html 条款05:了解C++默默编写并调用哪些函数 如果自定义一个空类的话,会自动生成默认构造函数.拷贝构造函数. ...
- plsPlugin
init: 监控目录变化(增删) 监控jar变化,load
- Python静态代码检查工具Flake8
简介 Flake8 是由Python官方发布的一款辅助检测Python代码是否规范的工具,相对于目前热度比较高的Pylint来说,Flake8检查规则灵活,支持集成额外插件,扩展性强.Flake8是对 ...