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. Faiss 向量库编译安装

    Faiss 是 Facebook 开源的一套高效相似性搜索以及向量聚类的开发库,支持各类相似性搜索的算法,Faiss 项目本身是使用 C++ 编写的,但是提供 Python 的绑定,可以直接使用 nu ...

  2. KubeVela 1.5:灵活框选 CNCF 原子能力打造独特的企业应用发布平台

    简介: KubeVela 1.5 于近日正式发布.在该版本中为社区带来了更多的开箱即用的应用交付能力,包括新增系统可观测:新增 Cloud Shell 终端,将 Vela CLI 搬到了浏览器:增强的 ...

  3. 首次公开!阿里云开源PolarDB总体架构和企业级特性

    ​简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为<PolarDB 总体架构设计和企业级特性>的精彩演讲. 在3月2日 ...

  4. 深入解析 Dubbo 3.0 服务端暴露全流程

    ​简介: 随着云原生时代的到来,Dubbo 3.0 的一个很重要的目标就是全面拥抱云原生.正因如此,Dubbo 3.0 为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制. ...

  5. WPF 自定义控件入门 可重写的各个方法或属性的意义

    本文属于 WPF 自定义控件入门系列博客.本文整理在 WPF 里面,自定义控件,非用户控件时,可以重写基类的许多方法和属性,这些方法和属性的作用和含义.方便让大家了解到自定义控件时,有哪些方法或属性可 ...

  6. Pod入门知识(4)

    一.Pod是什么? 官方文档:https://kubernetes.io/docs/concepts/workloads/pods/ Pod 是 Kubernetes 中的最小调度单元,k8s 是通过 ...

  7. 05.Java 方法详解

    1.方法的定义及调用 设计方法的原则:一个方法只完成一个功能,有利于后期的扩展 方法的定义: 修饰符(可选) 返回值类型 方法名(参数类型 参数名(可选)){ 方法体 return 返回值; } 2. ...

  8. WEB服务与NGINX(25)- LNMP架构-WEB集群部署phpmyadmin

    目录 1 LNMP架构-WEB集群部署phpmyadmin 1.1 WEB集群架构需求分析 1.2 WEB集群架构环境 1.3 部署mariadb 1.4 部署web服务器nginx 1.5 部署re ...

  9. jeecg-boot中导出excel冲突问题

    jeecg-boot自带的库是autopoi,如果自定义导出excel引入poi,则需要POI版本要保持一致,否则会出现冲突的情况,导致这2个都用不了的情况. Autopoi底层用的是POI库,poi ...

  10. 使用 Docker 部署 WebTop 运行 Linux 系统

    1)项目介绍 GitHub:https://github.com/linuxserver/docker-webtop WebTop 它是一个基于 Linux ( Ubuntu 和 Alpine 两种版 ...