P1080 [NOIP 2012 提高组] 国王游戏

news/2025/10/5 23:14:16/文章来源:https://www.cnblogs.com/mLazy/p/19127155
难度 算法s 日期 题目链接
普及+/提高 贪心、邻项排序 2025-07-25 https://luogu.com.cn/problem/

\(n\) 个大臣和一个国王,每个大臣左、右手各有一个数,分别记为 \(a_i,b_i\),国王手上也有数,记为 \(a,b\)。现在让国王排在队首,大臣按一定顺序排成一列接在国王后面。

每个大臣都会得到国王的金币奖励,对于队伍中排第 \(k\)\(1\le k\le n\))的大臣,他得到的金币

\[w_k=\cfrac{a\prod_{i=1}^ka_k}{b_k}. \]

也就是他前面所有人(包括国王)左手上的数之积除以他自己右手上的数。现在希望通过恰当地安排大臣的排列顺序,使得 \(\max w_k\),即获得金币最多的大臣获得的金币数尽可能小。

这是一道经典的邻项排序问题,可以通过这道题学会邻项排序的基本思路。请注意下文中加粗的部分。

思路

对于两个相邻的大臣,分别排在 \(i,j\) 位置上,假设 \(i\lt j\),他们之前所有人左手上的数的乘积为 \(p\)。那么他们现在得到的金币数分别是:

\[w_i=\frac{p}{b_i},w_j=\frac{p\times a_i}{b_j}, \]

如果他们交换位置,那么有:

\[w_i^\prime=\frac{p\times a_j}{b_i},w_j^\prime=\frac{p}{b_j}. \]

现在我们考虑,如果要满足 \(i\lt j\)\(\max\{w_i,w_j\}\)\(j<i\) 时更小(或相等),即

\[\max\{\frac{p}{b_i},\frac{p\times a_i}{b_j}\}\le\max\{\frac{p\times a_j}{b_i},\frac{p}{b_j}\}, \]

应该满足什么条件? 我们考虑分类讨论,然后归纳

  • 首先有以下事实:

    \[\frac{p}{b_i}\le \frac{p\times a_j}{b_i},\frac{p\times a_i}{b_j}\ge\frac{p}{b_j}. \]

  • 由上述事实可知,当左侧 \(p/b_i\) 成为最大值时,右侧一定 \(\ge\) 左侧(因为右侧 \(\ge(p\times a_j)/b_i\))。为了让左侧 \(p/b_i\) 成为最大值,需要满足:

    \[\frac{p}{b_i}\ge\frac{p\times a_i}{b_j}\Rightarrow b_j\ge a_i\times b_i.(1) \]

  • 对于另一种情况,左侧 \((p\times a_i)/b_j\) 成为最大值时,考虑右侧情况:

    • 如果 \(p/b_j\) 是最大值,那么由事实可知右侧一定小于左侧了,情况不成立。

    • 所以一定是 \((p\times a_j)/b_i\) 成为最大值。

    为了让右侧 \((p\times a_j)/b_i\) 成为最大值,需要满足:

    \[\frac{p\times a_j}{b_i}\ge\frac{p}{b_j}\Rightarrow a_j\times b_j\ge b_i.(2) \]

    但是这似乎没什么用,再想想能找到什么条件。我们还要让此时右侧最大值 \(\ge\) 左侧最大值,即:

    \[\frac{p\times a_j}{b_i}\ge\frac{p\times a_i}{b_j}\Rightarrow a_j\times b_j \ge a_i \times b_i.(3) \]

我们得到了三个不等式,现在进行归纳。我们想要的终极约束不等式\((*)=(1)\cup[(2)\cap(3)].\)

所以有:

\[a_j\times b_j\ge a_i\times b_i.(*) \]

也就是说,只要相邻的两个大臣 \(i,j\) 满足这个条件,就让 \(i\lt j\),即大臣 \(i\) 排在前面。

编码

根据这个设计 bool operator<() ,然后用 std::sort() 就可以了。我们可以把国王和大臣的 \(a,b\) 统一存储于一个数组中,但是排序的时候从第二个元素开始排,这样写起来可以简单点。

这题要用高精度才能 AC。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音响没声音

联想拯救者x9000p笔记本(win11)之前总来不来就没音(只能听到特定几个音调),然后隔一段时间重启莫名其妙就好了,以为是静电。 这次又故障了,就把如图关了,就解决了,查了驱动也都是最新,网上有人说这个会消杂音…

P1654 OSU!

难度 算法s 日期 题目链接提高+/省选− 数学期望、递推 2025-07-21~22 https://luogu.com.cn/problem/P1654似乎是一道蛮经典的期望递推题。 洛谷上的题解看不懂,老师讲的也很简略。只有自己推起来感觉很复杂。。。心…

响应式网站几个断点毕节市城乡建设局网站

文章目录 年费和小额账户管理费减免政策&#xff1a;每家银行均可有一张借记卡享受双免政策减免政策&#xff1a;代发工资、低保、社保、医保、失业保险、养老金、退休金、住房公积金等账户减免政策&#xff1a;二、三类电子账户一类卡、二类卡和三类卡二、三类电子账户不收取年…

做网站网络合同石河子网站制作

问题如下;Java代码中的方法是&#xff1a;Rule foo(){return sequence(foo(), x());}这将引发解析循环,当然应该避免;但是,这是合法的&#xff1a;Rule foo(){return sequence(x(), foo());}现在,代码中的其他地方我可以访问RuleMethod,这是一个扩展MethodNode的类,因此我可以访…

10/5

今日学习了Java,背诵了英语单词,明日继续

10/4

今日学习了Java,背诵了英语单词,明日继续

DynamoDB十年演进:云原生数据库的技术革新

本文深入探讨了Amazon DynamoDB云原生数据库的十年发展历程,从Dynamo研究论文到完全托管服务的演进,涵盖了分布式系统架构设计、弹性扩展机制、毫秒级性能优化等核心技术突破,以及全球表、事务支持等创新功能的发展…

惠州网站建设英语怎么快速搭建网站

当用C语言来实现猜数字游戏时&#xff0c;我们可以设计一个简单的游戏规则&#xff1a;计算机随机生成一个1到100之间的整数&#xff0c;玩家需要通过猜测来猜出这个数字。游戏会根据玩家猜测的数字与目标数字的大小关系给出提示&#xff0c;直到玩家猜中为止。 下面是一个用C…

详细介绍:【python】uv管理器

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

企业微网站开发锛网站

现在&#xff0c;人工智能的发展处于跳跃式阶段&#xff0c;我们也对AI在大型数据集的应用进展感到吃惊。更重要的是&#xff0c;那些我们没有跟踪的数十亿张照片或餐厅的评论并没有被遗漏掉&#xff1a;迁移学习技术让收集数据变得更加“容易”。另外&#xff0c;得益于PyTorc…

深圳网络做网站app开发费用大概多少

22/06/2005 12:22 FPOracle从8.1.6开始提供分析函数&#xff0c;分析函数用于计算基于组的某种聚合值&#xff0c;它和聚合函数的不同之处是对于每个组返回多行&#xff0c;而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表&#xff0c;如果没…

NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array.

NotImplementedError: Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array. This error may indicate that youre trying to pass a Tensor to a NumPy call, which is not supportednumpy …

porting perf性能观测工具

1.cd sdk/kernel/linux/linux-6.1.83/tools/perf 2.make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- NO_LIBPYTHON=1 NO_LIBPERL=1 NO_LIBBPF=1 3.在当前路径下生成perf 4.copy到板子/tmp目录下 scp ./per…

Windows常用快捷指令

Windows常用快捷指令 总览shift+数字键:输入数字键上的特殊符号 shift+Ctrl:切换输入法(台式电脑) shift+空格:切换输入法(笔记本电脑) Ctrl+C:复制 Ctrl+V:粘贴 Ctrl+X:剪切 Ctrl+Z:撤销 Ctrl+Y:重做 Ctr…

网站建设价格方案网站程序 wordpress 织梦 discuz

公证服务信息您是否需要高吞吐量的Corda网络&#xff1f; 网络的吞吐量是否稳定&#xff1f; 您是否已经从其他领域挤出了所有可能的表现&#xff1f; 如果您对这些问题的回答是“是”&#xff0c;那么我可能会为您提供一些有用的信息。 我列出了这些问题&#xff0c;以减少您过…

Python 在金融中的应用- Part 1 - 教程

Python 在金融中的应用- Part 1 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

影响网站收录的因数沈阳工程最新动态

参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为几个部分&#xff1a;驱动加载部分、probe部分、open部分、urb回调函数处理部分。 一、驱动加载部分 [cpp] view plaincopy static int __init usb_mouse_init(void) { int retval usb_register(&a…

网站开发常用软件是什么成都市住房和城乡建设厅官方网站

编译安装为了实现MySQL的更高级别的性能调优&#xff0c;我们通常需要理解其内部实现机制&#xff0c;并对其进行优化调试。在下面的系列中&#xff0c;我们会分别介绍MySQL的部分内部实现机制。首先我们介绍如何从源代码部署一台MySQL服务器。1.下载MySQL Community Server源码…

QBXT2025S刷题 Day4

今天的题 \(75pts\ rk50+\) ,最废的一次。 T1 简单 \(\mathcal{DP}\)。 #include <iostream>using std::cin; using std::cout; const int N = 1e3 + 10; #define int long long const int mod = 998244353;int…