题意(CodeForces 614D)

每个人有\(n(n\le 10^5)\)个技能,技能等级都在\([0,10^9]\)的范围,每个技能有一个当前等级,所有技能的最高等级都为A。一个人的力量被记做以下两项的和:
1. 顶级技能的个数 *cf
2. 最低等级的技能 *cm

每个单位的钱能够提升一级力量。我们希望花尽可能少的钱,使得力量尽可能高。

分析

我二分的功力还是不足,要多努力。这题其实是一个非常明显的暴力:我们枚举提高到A的等级的个数(到不能提升为止),枚举这种情况下,我们能够令把多少人的等级提升到相同的某个等级——这个地方可以用二分解决(先排序)。这样遍历一遍整个等级,就能得到最优的策略,然后输出答案即可。具体的代码细节见注释。

代码

/** Filename: cfr339d2d.cpp* Date: 2018-11-07*/#include <bits/stdc++.h>#define INF 0x3f3f3f3f
#define PB emplace_back
#define MP make_pair
#define fi first
#define se second
#define rep(i,a,b) for(repType i=(a); i<=(b); ++i)
#define per(i,a,b) for(repType i=(a); i>=(b); --i)
#define ZERO(x) memset(x, 0, sizeof(x))
#define MS(x,y) memset(x, y, sizeof(x))
#define ALL(x) (x).begin(), (x).end()#define QUICKIO                  \ios::sync_with_stdio(false); \cin.tie(0);                  \cout.tie(0);
#define DEBUG(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)using namespace std;
using pi=pair<int,int>;
using repType=int;
using ll=long long;
using ld=long double;
using ull=unsigned long long;const int MAXN=100005;struct Skill
{int v,o;Skill() {}Skill(int _v, int _o):v(_v), o(_o) {}
} a[MAXN];int n;
ll A,cf,cm,m,sum[MAXN];int solve(int R, ll now) // given present cost, and r which tells 1~r are not A,
{                        // which lowest lv can you reach?if(R==0) return A;int l=1, r=R;while(l<r){int mid=(l+r+1)/2;ll need=ll(a[mid].v)*mid-sum[mid];  // we need it to make pre n peopleif (need>now) r=mid-1; else l=mid; // reach the lv of the nth.}ll need=ll(a[l].v)*l-sum[l];ll more=(now-need)/l;return min(ll(A), a[l].v+more);
}int
main()
{scanf("%d%lld%lld%lld%lld", &n, &A, &cf, &cm, &m);rep(i,1,n){scanf("%d", &a[i].v);a[i].o=i;}sort(a+1, a+n+1, [](Skill& x, Skill& y) -> bool{return x.v<y.v;});a[n+1].v=A;rep(i,1,n) sum[i]=sum[i-1]+a[i].v;ll ans=-1, cost=0;int v,p;per(i,n,0){cost+=A-a[i+1].v; if(cost>m) break;int minv=solve(i,m-cost);ll tmp=minv*cm+(n-i)*cf;if(tmp>ans){ans=tmp;p=i;v=minv;}}printf("%lld\n", ans);per(i,n,p+1) a[i].v=A;rep(i,1,p) a[i].v=max(a[i].v, v);sort(a+1, a+n+1, [](Skill& x, Skill& y) -> bool{return x.o<y.o;});rep(i,1,n)printf("%d ", a[i].v);printf("\n");return 0;
}

转载于:https://www.cnblogs.com/samhx/p/CFR339D2D.html

「日常训练」Skills(Codeforce Round #339 Div.2 D)相关推荐

  1. 「日常训练」Bad Luck Island(Codeforces Round 301 Div.2 D)

    题意与分析(CodeForces 540D) 是一道概率dp题. 不过我没把它当dp做... 我就是凭着概率的直觉写的,还好这题不算难. 这题的重点在于考虑概率:他们喜相逢的概率是多少?考虑超几何分布 ...

  2. 「日常训练」Alternative Thinking(Codeforces Round #334 Div.2 C)

    题意与分析 (CodeForces - 603A) 这题真的做的我头疼的不得了,各种构造样例去分析性质... 题意是这样的:给出01字符串.可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所 ...

  3. 「日常训练」Common Subexpression Elimination(UVa-12219)

    今天做的题目就是抱佛脚2333 懂的都懂. 这条题目干了好几天,最后还是参考别人的代码敲出来了,但是自己独立思考了两天多,还是有收获的. 思路分析 做这条题我是先按照之前的那条题目(The SetSt ...

  4. 「日常训练」 Mike and Fun (CFR305D2B)

    题意(CodeForces 548B) 每次对01矩阵中的一位取反,问每次操作后,单列中最长连续1的长度. 分析 非常非常简单,但是我当时训练的时候WA了四次...无力吐槽了,人间 不值得.jpg 代 ...

  5. 「日常训练」 Genghis Khan the Conqueror(HDU-4126)

    题意 给定\(n\)个点和\(m\)条无向边(\(n\le 3000\)),需要将这\(n\)个点连通.但是有\(Q\)次(\(Q\le 10^4\))等概率的破坏,每次破坏会把\(m\)条边中的某条 ...

  6. 「分布式训练」使用 DDP 实现程序单机多卡并行指南

    最近在大趋势的影响下,开始染指大模型.由于实验室计算资源的限制,需要使用单机多卡并行的方式运行程序,这里以 BLOOM-560m 模型为例,演示如何通过单机多卡DDP并行的方式微调完成下游任务. 目录 ...

  7. 「日常训练知识学习」树的直径(POJ-1849,Two)

    题意 一个城市由节点和连接节点的街道组成,街道是双向的. 此刻大雪覆盖了这个城市,市长确定了一些街道要将它们清扫干净,这些街道保证所有的节点可以通过它们连通而且街道数目尽可能小. 现有两台相同的扫雪机 ...

  8. 「模型训练」如何迁移学习一个小网络到移动端

    https://www.toutiao.com/i6715373426858525198/ 作者 | 言有三 编辑 | 言有三 0 引言 现在很多的图像算法都是离线计算的,而学术界刷榜单那些模型,什么 ...

  9. 经常玩电脑正确的坐姿_「姿态训练」保持良好坐姿的八个步骤

    我们在坐立时如果想保持直立,需要一个稳定.平衡位置的骨盆.时刻保持理想的身体排列结构以及强壮的核心肌肉是非常有益的.维持良好的体态是一种习惯,需要持续地练习,以下方法供大家参考. 维持良好坐立姿势的8 ...

最新文章

  1. [flite源码分析一]常用数据结构cst_val
  2. rsync实现linux间同步
  3. FishC01 讲:我和 Python 第一次亲密接触
  4. Linux centos7 配置用户自动登录
  5. python怎么做乘法表_python怎么写乘法表
  6. 在.Net framework下遍历XML文挡树的两种算法
  7. java 语法_Java基础语法
  8. android crash没有日志_App测试之monkey(四)-调试参数及日志
  9. 信号通讯编程,王明学learn
  10. 一致性Hash与负载均衡
  11. 易筋SpringBoot 2.1 | 第六篇:JdbcTemplate访问MySQL
  12. 常用 ASCII 码对照表
  13. 工程实践 | 在 Flutter 中实现一个精准的滑动埋点
  14. 巴曙松:寻找可持续的经济复苏
  15. 牛津博士讲大数据和量化金融
  16. 新冠疫情历史数据(COVID-19-Data)
  17. 雨雨cms-YYCMS5.0新版影视网源码自动采集数据-玥雅CMS
  18. 国科大-高性能计算考试
  19. MySQL8.0 OCP最新版1Z0-908认证考试题库整理-001
  20. 集合的基本操作和基本运算

热门文章

  1. python编程题三
  2. final 字符常量——确定一个值后该值无法改动,使变量变字符常量
  3. 【不会吧不会吧,不会有人真的三分钟入门Python了吧?】Python编程基础
  4. leetCode-删除排序数组中的重复项
  5. 字节(byte)简介
  6. 如何安装Bit-Z IOS版APP
  7. VNC over reverse SSH
  8. 【译】A Brief History of P2P Content Distribution, in 10 Major Steps
  9. Android6.0的Looper源码分析(1)
  10. 51Nod 斜率最大