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\) 个银币公司省下的最多银币。

有转移方程:

\[f_{x, i} = \max_{0 \le j \le i} f_{x - 1, i - j} + w(j)
\]

其中:

\[r = j \mod g
\]
\[w(j) = \begin{cases}
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

随机推荐

  1. 力扣23(java)-合并k个升序链表(困难)

    题目: 给你一个链表数组,每个链表都已经按升序排列. 请你将所有链表合并到一个升序链表中,返回合并后的链表. 示例 1: 输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1 ...

  2. Nacos2.0的K8s服务发现生态应用及规划

    ​简介:Nacos 是阿里巴巴于 2018 年开源的注册中心及配置中心产品,帮助用户的分布式微服务应用进行服务发现和配置管理功能.随着 Nacos2.0 版本的发布,在性能和扩展性上取得较大突破后,社 ...

  3. 阿里云边缘云ENS再升级 四大场景应用加速产业数字化落地

    ​简介: 云栖大会 | 于10月21日上午举办的边缘云应用升级与技术创新论坛中,阿里云边缘云ENS产品全面升级,从边缘云产品.技术.行业应用等维度全面阐述阿里云在边缘计算领域的技术积累.产品& ...

  4. [FAQ] Git 修改最后一次的提交人和提交时间 ?

    $ date -R Tue, 21 Mar 2021 21:08:58 +0800 $ git commit --amend  --author="xxx <xxx@email.com ...

  5. WPF 更改 DrawingVisual 的 RenderOpen 用到的对象的内容将持续影响渲染效果

    在 WPF 里面,可以通过 DrawingVisual 来进行使用底层的绘制方法,此方法需要调用 DrawingVisual 的 RenderOpen 拿到 DrawingContext 类型的对象, ...

  6. Echarts立体地图加3D柱图可点击可高亮选中的开发

    注意 echarts请使用v5.1.0以上版本,低版本会无法显示,或者无法触发点击事件. 若有闪屏bug,不要设置temporalSuperSampling属性. 注意图层顺序. 实现原理 借助 ec ...

  7. 第一章 Jenkins安装配置

    Jenkins官网 # 官网: https://www.jenkins.iohttps://www.jenkins.io/zh/ # docker安装: https://www.jenkins.io/ ...

  8. 如何将本地项目第一次同步到gitee远程

    一,Gitee账号的注册/登录 在gitee登录入口输入相关信息进行注册登录https://gitee.com/signup#lang=zh-CN 二,本地安装git客户端并配置用户信息 1.Git ...

  9. vue点击旋转,再点击复原

    效果: 1.html.通过绑定t值控制不同的class名, 原图是右边方向的箭头 <img class="right" v-if="item.t" src ...

  10. Oracle和达梦:相似度函数:UTL_MATCH

    UTL_MATCH介绍: Oracle的UTL_MATCH包是一个提供字符串匹配和相似度计算功能的工具包.它包含了一系列函数,用于执行字符串比较.相似度计算和模式匹配等操作. UTL_MATCH包中的 ...