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 ...
随机推荐
- spl_autoload_register()函数
一.__autoload 这是一个自动加载函数,在PHP5中,当我们实例化一个未定义的类时,就会触发此函数.看下面例子: printit.class.php <?php class PRINTI ...
- web漏洞原理 (需要每周更新此篇文章)
SQL注入攻击简介 结构化查询语言SQL是用来和关系数据库进行交互的文本语言.它允许用户对数据进行有效的管理,包含了对数据的查询.操作.定义和控制等几个方面,例如向数据库写入.插入数据,从数据库读取数 ...
- Unity Lighting - The Precompute Process 预计算过程(二)
The Precompute Process 预计算过程 In Unity, precomputed lighting is calculated in the background - eith ...
- Python的包(Packages)
包,Package,是一种Python模块的集合,从文件组织形式上看,包就是一个文件夹,里面放着各种模块(.py文件),也可以有子文件夹(子包).包名构建了一个Python模块的命名空间.比如,模块名 ...
- Python基础 之 set集合 与 字符串格式化
数据类型的回顾与总结 可变与不可变1.可变:列表,字典2.不可变:字符串,数字,元组 访问顺序:1.直接访问:数字2.顺序访问:字符串,列表,元祖3.映射:字典 存放元素个数:容器类型:列表,元祖,字 ...
- Skype for Business Server 方案
方案说明: 高可用性的配置屏蔽了单点故障,使得当一个服务器节点失效时,另外的可用的节点能够进行服务的接管.可伸缩性的配置可以保证当即时沟通平台的使用用户增加时,该平台应该具有良好的可伸缩性,能非常方便 ...
- 从零开始的Python学习Episode 1
一.输入与输出 1.输入 input("number:") num = input("number:") 下面一段可以把输入的信息存在num中. 注意:输入的信 ...
- 论文笔记:Deep Attentive Tracking via Reciprocative Learning
Deep Attentive Tracking via Reciprocative Learning NIPS18_tracking Type:Tracking-By-Detection 本篇论文地主 ...
- Matlab 图象操作函数讲解
h = imrect;pos = getPosition(h); 这个函数用来获取图象上特定区域的坐标,其中pos的返回值中有四个参数[xmin,ymin,width,height],特定区域的左上角 ...
- 改maven下创建的动态网站依赖的jre版本
问题描述 通过maven创建一个动态网站后,eclipse会提示一个提醒 Build path specifies execution environment J2SE-1.5. There are ...