CF1836
A.Destroyer
开个桶记录个数,看满不满足单调不上升即可。
B.Astrophysicists
辛辛苦苦写了这么久的文章就没了????烦死了。
自己做 Virtual Contest 的时候这道题打表打了半天(20min)才搞定……
题目大意
有 \(n\) 个人,\(k\) 个金币,每个金币价值 \(g\) 个银币。
良心公司要把这 \(k\) 个金币作为工资分给这 \(n\) 个人,但是没有办法平均分配,良心老板想出了分配规则:
由你设定每个人分配的银币数 \(x_i\)。
你需要保证 \(\sum_{i = 1}^n x_i = k \times g\)。
老板会把银币数转化为金币发放,所以想出了以下规则:
令 \(r = x \mod g\),如果 \(r \ge \lceil \frac g2 \rceil\),那么公司会额外花费 \(g - r\) 个银币以凑出完整的金币(此时花费了 \(x + g - r\) 个银币)。
反之,会吞掉这 \(r\) 个银币以凑出完整的金币(此时花费了 \(x - r\) 个银币)。
假定最终公司的花费为 \(p\) 个银币。你需要最小化 \(p\),并输出 \(k \times g - p\)。
解题思路
如果开始没有思路,那么打表是一个很好的方法。
首先我们可以很轻易的得到一个 \(O(nkg)\) 的 DP 算法。
设 \(f_{x, i}\) 表示处理到第 \(x\) 个人,一共分配了 \(i\) 个银币公司省下的最多银币。
有转移方程:
\]
其中:
\]
r - g &, r \ge \lceil \frac g2 \rceil \\
r &, r \lt \lceil \frac g2 \rceil
\end{cases}
\]
运行后输出 DP 数组,结合 \(m = \lceil \frac g2 \rceil - 1\)可以很轻易的发现规律:
最终的数组分为两个部分:
第一个部分为 \([0, nm]\),下标与数值一一对应。
第二部分为 \([-\lfloor \frac g2 \rfloor - m - nm, nm]\) 不断循环。
现在我们来严谨证明一下。
理想状态下,我们自然是给每一个人分发 \(m = \lceil \frac g2 \rceil - 1\) 个银币,这样就可以吞掉 \(nm\) 个银币。
但是可能存在一下两种情况:
其实根本没有 \(nm\) 个银币,所以全部都分配到 \(\le m\) 个。所以全部可以吞掉。对应上文中第一部分。
还剩下了 \(r = k \times g - nm\) 个银币。由于我们可以按照一个金币为单位再分配,所以我们只需要关注 \(r \mod g\) 的值。
显然,如果把这些银币分给不同的人是不优的,因为破坏了老板吞掉更多人 \(m\) 个银币的美梦。
所以这些银币应该全部分配给一个人,对于答案做出贡献 \(w(m + k \times g- nm) - m\)。
(化简一下)对应上文中第二部分。
提交记录:https://codeforces.com/contest/1836/submission/211134556
C.k-th equality
注意,注意:
Each input file has at most 5 test cases which do not satisfy A,B,C≤3.
所以,\(O(10^{\min(A, B)})\) 可以过。
那么考虑顺序枚举 \(A\) 位的数 \(a\),满足的数 \(b\) 应该为一个连续区间,这个可以 \(O(1)\) 解决。
所以区间长度与 \(k\) 判断一下即可。
提交记录:https://codeforces.com/contest/1836/submission/211137329
随机推荐
- 【笔记】报错:numeric or value error: character to number conversion error
报错:numeric or value error: character to number conversion error 报错如下: 数据库操作错误."2327,13619/v1:65 ...
- 力扣1082(MySQL)-销售分析Ⅰ(简单)
题目: 产品表:Product 销售表:Sales 编写一个 SQL 查询,查询总销售额最高的销售者,如果有并列的,就都展示出来. 以 任意顺序 返回结果表. 查询结果格式如下所示. Product ...
- 传统 Web 框架部署与迁移
简介: 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. 与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式. ...
- 让容器跑得更快:CPU Burst 技术实践
简介:让人讨厌的 CPU 限流影响容器运行,有时人们不得不牺牲容器部署密度来避免 CPU 限流出现.我们设计的 CPU Burst 技术既能保证容器运行服务质量,又不降低容器部署密度.CPU Bur ...
- 基于 MaxCompute 的智能推荐解决方案
简介: 在互联网行业红利已过.在获客成本越来越高.在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一 ...
- TSDB时序数据库时序数据压缩解压技术浅析
简介: 目前,物联网.工业互联网.车联网等智能互联技术在各个行业场景下快速普及应用,导致联网传感器.智能设备数量急剧增加,随之而来的海量时序监控数据存储.处理问题,也为时序数据库高效压缩.存储数据能 ...
- [FAQ] jsoneditor 如何切换 mode 或者选择 modes
1. 用于切换编辑器模式:text.tree.code JSONEditor.setMode(mode) 2. 让 mode 变成可以选择的: const options = { modes: ['t ...
- [FE] ServerSideRender 加上 PWA 特性的一种处理方式
SSR 和 PWA 这两块分开讲,需要做不少的处理,现在我们有了一种简便的方式来处理它,就是使用 Quasar 框架. Quasar 支持了 SPA.SSR.PWA.Mobile APP.Electr ...
- [Go] golang 时间格式化 12小时制 与 24小时制
timestamp := int64(1591271169) # 12小时制 time.Unix(timestamp, 0).Format("2006-01-02 03:04:05" ...
- SemanticFunction 融合 LLM 和传统编程
本文将继续和大家介绍 SemanticKernel 神奇的魔法,将使用 LLM 大语言模型编写的自然语言函数和传统的编程语言编写的函数融合到一起的例子.通过本文的例子,大家可以看到 SemanticK ...