Skills - CF613B
Lesha plays the recently published new version of the legendary game hacknet. In this version character skill mechanism was introduced. Now, each player character has exactly n skills. Each skill is represented by a non-negative integer ai — the current skill level. All skills have the same maximum level A.
Along with the skills, global ranking of all players was added. Players are ranked according to the so-called Force. The Force of a player is the sum of the following values:
- The number of skills that a character has perfected (i.e., such that ai = A), multiplied by coefficient cf.
- The minimum skill level among all skills (min ai), multiplied by coefficient cm.
Now Lesha has m hacknetian currency units, which he is willing to spend. Each currency unit can increase the current level of any skill by 1 (if it's not equal to A yet). Help him spend his money in order to achieve the maximum possible value of the Force.
The first line of the input contains five space-separated integers n, A, cf, cm and m (1 ≤ n ≤ 100 000, 1 ≤ A ≤ 109, 0 ≤ cf, cm ≤ 1000, 0 ≤ m ≤ 1015).
The second line contains exactly n integers ai (0 ≤ ai ≤ A), separated by spaces, — the current levels of skills.
On the first line print the maximum value of the Force that the character can achieve using no more than m currency units.
On the second line print n integers a'i (ai ≤ a'i ≤ A), skill levels which one must achieve in order to reach the specified value of the Force, while using no more than m currency units. Numbers should be separated by spaces.
3 5 10 1 5
1 3 1
12
2 5 2
3 5 10 1 339
1 3 1
35
5 5 5
In the first test the optimal strategy is to increase the second skill to its maximum, and increase the two others by 1.
In the second test one should increase all skills to maximum.
简单题意
你有n个技能可以学,你有m个技能点可以分配,每个技能的上限值都是A,每个技能都给出了至少要学的等级,然后你要合理分配技能点,使得战力最大
战力=满级技能*Cf+最小等级*Cm
然后我们枚举满级的技能个数,显然我们应该把那些至少学习等级大的点成满级,然后剩下的技能尽量最小等级最大
所以我们一开始从小到大排序,枚举后面i个变成满级,前面的二分最小等级,用前缀和判断可行性,然后计算出战力,更新答案
#include<cstdio>
#include<algorithm>
using namespace std; const int maxn=; long long A,cf,cm,n,w,a[maxn],b[maxn],s[maxn],ans,tmp1,tmp2; bool compare(long long x,long long y){
return a[x]<a[y];
} long long find(long long x,long long rr){
long long l,r,mid;
l=;r=rr;
while(l!=r){
mid=(l+r+)/;
if(a[b[mid]]<x)l=mid;
else r=mid-;
}
return l;
} int main(){
scanf("%I64d%I64d%I64d%I64d%I64d",&n,&A,&cf,&cm,&w);
long long i;
for(i=;i<=n;i++)scanf("%I64d",&a[i]);
for(i=;i<=n;i++)b[i]=i;
sort(b+,b++n,compare);
for(i=;i<=n;i++)s[i]=s[i-]+a[b[i]];
w+=s[n];
ans=-;
for(i=;i<=n+;i++){
if(A*(n-i+)+s[i-]>w)continue;
if(i==)ans=cf*n+cm*A,tmp1=;
if(i==)break;
long long l=a[b[]],r=A,mid,tt;
while(l!=r){
mid=(l+r+)/;
tt=find(mid,i-);
if(A*(n+-i)+mid*tt+s[i-]-s[tt]<=w)l=mid;
else r=mid-;
}
if(ans<cf*(n+-i)+l*cm)ans=cf*(n+-i)+l*cm,tmp1=i,tmp2=l;
}
printf("%I64d\n",ans);
for(i=;i<tmp1;i++)
if(a[b[i]]<tmp2)a[b[i]]=tmp2;
for(i=tmp1;i<=n;i++)a[b[i]]=A;
for(i=;i<=n;i++)printf("%I64d ",a[i]);
return ;
}
AC代码
Skills - CF613B的更多相关文章
- CF613B Skills
CF613B Skills 洛谷评测传送门 题目描述 Lesha plays the recently published new version of the legendary game hack ...
- How to Develop blade and soul Skills
How to Develop Skills Each skill can be improved for variation effects. Some will boost more strengt ...
- Top Five Communication Skills for Project Managers
Research among project managers globally identifies top communication skills for leading teams. Lead ...
- codeforces 613B B. Skills(枚举+二分+贪心)
题目链接: B. Skills time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Computer skills one can learn within one day
Computer related technical skills are usually thought as complicated and difficult to understand. It ...
- Advice on improving your programming skills
Programming is cool. But behind the scenes it's also difficult for many people. Many people are defe ...
- Codeforces Round #322 (Div. 2) C. Developing Skills 优先队列
C. Developing Skills Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/p ...
- cf581C Developing Skills
Petya loves computer games. Finally a game that he's been waiting for so long came out! The main cha ...
- What skills are needed for machine learning jobs
What skills are needed for machine learning jobs?机器学习工作必须技能 原文: http://www.quora.com/Machine-Learnin ...
随机推荐
- 【转载】深入研究Windows内部原理绝对经典的资料
原文:深入研究Windows内部原理绝对经典的资料 另一篇资料:深入研究Windows内部原理系列 (为了方便大家下,我打包了放在一下地址: 1-6:http://download.csdn.net/ ...
- P1294 高手去散步
P1294 高手去散步 题目背景 高手最近谈恋爱了.不过是单相思.“即使是单相思,也是完整的爱情”,高手从未放弃对它的追求.今天,这个阳光明媚的早晨,太阳从西边缓缓升起.于是它找到高手,希望在晨读开始 ...
- JS学习 用 arguments 对象模拟函数重载
用 arguments 对象判断传递给函数的参数个数,即可模拟函数重载: function doAdd() { if(arguments.length == 1) { alert(arguments[ ...
- macOS 10.13 High Sierra PHP开发环境配置
命令:sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf /Library/StartupItems/MySQLCOM ...
- 引领技术变革,腾讯云、腾讯WeTest和英特尔,合作布局云游戏
WeTest 导读 ChinaJoy作为中国泛娱乐产业年度风向标,受到全球业界的高度关注.在本届ChinaJoy上,腾讯云.腾讯WeTest和英特尔,合作为游戏玩家.游戏开发者等业界人士联合展出了云游 ...
- C 数据类型 常量 变量
一 数据类型 1. 什么是数据 生活中时时刻刻都在跟数据打交道 比如体重数据 血压数据 股价数据等 在我们使用计算机的过程中 会接触到各种各样的数据 有文档数据 图片数据 视频数据 还有聊QQ时产生的 ...
- Django学习总结之模板templates
- django模板: templates - 模板分为两个过程: 1, 加载 : loader.get_template('xxx.html') 返回值是一个template对象 2, 渲染 : t ...
- Intro to Probabilistic Model
概率论复习 概率(Probability) 频率学派(Frequentist):由大量试验得到的期望频率(致命缺陷:有些事情无法大量试验,例如一封邮件是垃圾邮件的概率,雷达探测的物体是一枚导弹的概率) ...
- 2018(容斥定理 HDU6286)
2018 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- UVa 1586 - Molar Mass - ACM/ICPC Seoul 2007 - C语言
关键在于判断数字是两位数还是单位数,其他部分没有难度. #include"stdio.h" #include"string.h" #include"c ...